본문 바로가기

Backend Study/Java

[JAVA] 힙 메모리 사용률

1. 자바의 힙 공간이란? 

자바 프로그램이 시작되면 JVM 즉 Java Virtual Machine이 운영 체제에서 일부 메모리를 가져온다. JVM은 모든 요구사항에 이 메모리를 사용하며 이 메모리의 일부를 JAVA 힙 메모리라고한다.

 

자바의 힙은 일반적으로 주소 공간의 맨 아래이 있으며 위쪽으로 이동을 한다. new 연산자를 사용하여 객체를 만들 때 마다 또는 다른 방법으로 객체에 힙에서 메모리가 할당되고 객체가 죽거나 가비지가 수집되면 메모리가 자바의 힙 공간으로 돌아간다.

 

2. 자바 힙 및 가비지 수집 

우리가 알고 있듯이 객체는 힙 메모리 내부에 생성되고 가비지 컬렉션은 자바 힙 공간에서 죽은 객체를 제거하고 메모리를 자바의 힙으로 되돌리는 프로세스이다. 가비지 수집을 위해서 힙은 New Generation, old 또는Tenured Generationperm 공간이라는 세가지 주요 영역으로 나누어진다.

 

New Generation of java Heap: 새로 생성된 객체가 저장되는 Java Heap 메모리의 일부이다.

응용 프로그램 과정에서 많은 객체가 생성되고 죽지만, 남아있는 경우 Java Garbage 수집기에 의해 old로 이동한다.

3. 힙 메모리 사용율을 알아야 하는 이유

응용 프로그램에서 어떤 종류의 개체를 만들고 있는지, 어떤 개체가 얼마나 많은 메모리를 사용해야하는지 등을 이해하고 있어야하는 이유는 OutOfMemoryError가 생길 수 있기 때문이다. 

JVM이 시작될 때 JVM 힙 공간은 -Xms 매개변수로 지정된 힙의 초기 크기와 동일하다. JVM은 -Xmx에 의해 지정된 최대 힙 크기에 가까운 곳에서 Java 힙을 확장하고, Java 힙에 새 개체를 만들기 위한 메모리가 더 이상 남아있지 않을 때 JVM에서 OutOfMemoryError가 발생한다. 이 에러를 던지기 전에 JVM은 가비지 수집기를 실행해서 사용 가능한 공간을 확보하려 시도도 하지만, Java의 힙에서 사용 가능한 공간이 많지 않은 경우에도 OutOfMemoryError가 발생하기도 한다. 

이 에러가 반복되서 나타나는 경우 힙을 늘리는 것도 좋지만, 자바에서 메모리 누수를 확인해보아야한다.

 

 

 

참고 ) https://lazaros7.tistory.com/436

'Backend Study > Java' 카테고리의 다른 글

[JAVA] 오토 박싱 & 오토 언박싱  (0) 2023.02.14
[JAVA] 람다와 스트림  (0) 2023.02.13
[JAVA] static 변수와 메서드  (0) 2023.02.06
[JAVA] 제네릭 (Generic)  (0) 2023.02.06
[JAVA]링크드리스트로 큐 구현하기 (Queue)  (0) 2023.02.06