JVM의 Runtime Data Area의 Heap 영역에 대해 알아보자
Heap 영역은
new 연산자로 생성되는 인스턴스, 배열 등을 저장하는 영역으로 GC가 주 타겟으로 삼는 영역이다.
| Eden | S0 | S1 | Old | Permanent |
Young Generation
Eden 영역
생성된 객체가 처음 위치하는 영역으로
Eden 영역에서 GC가 발생한 뒤에도 장기적으로 살아남은 객체들은 S0로 이동된다.
Eden영역이 가득차면 Minor GC가 발생한다.
Survivor0, Survivor1 영역
Eden영역에서의 활동과 마찬가지로 MinorGC 발생시 S0영역에서 살아남은 객체들은 S1으로 이동된다.
Old / Tenured Generation
Old 영역
S0, S1 영역을 오가는 동안에도 살아남은 객체들이며 aging임계치가 넘어간 것들이 이동되는 영역이다.
Young영역보다 GC가 더 적게 발생하며 이 영역이 가득차면 Full GC가 발생한다.
Minor GC
Young Generation에서 일어나는 GC로 자주 일어나는 GC이다.
자주 발생하는 GC이기 때문에 짧은 시간의 알고리즘으로 이루어 지는게 중요하다.
(Copy & Scanvenge)
Full GC
Old 영역의 참조가 되지 않는 객체를 삭제하는 과정으로 GC 스레드를 제외한 스레드가 멈추며 시간이 오래걸린다.
GC가 완료 후에 중단된 작업을 시작한다.
(Mark & Compact)
* System.gc()를 사용할 경우 Full GC가 발생한다.
* Permanent영역
JAVA8 버전 이상에서는 없어진 영역이며 Native메모리 영역 내의 Metaspace영역으로 수정되었다.
'Computer Science > JAVA' 카테고리의 다른 글
JVM, GC 알아보자 3 (1) | 2021.09.14 |
---|---|
SOLID 5원칙 (좋은 객체지향 설계란.) (0) | 2021.09.07 |
JVM, GC 살펴보자 1 (0) | 2021.09.04 |