-
박사 학위 논문인 가비지 컬렉션Java 2023. 8. 9. 23:25test
자바는 블루 칼라(주로 생산직에 종사하는 육체 노동자) 언어입니다.박사 학위 논문 주제가 아니라 일을 하려고 만든 언어죠.
— 제임스 고슬링(자바의 아버지) —저수준 세부를 일일이 신경쓰지 않는 대가로 저수준 제어권을 포기한다는 사상이 자바의 핵심이다.
아버지 입장에서는 ‘메모리 해제' 라는건 박사 학위 논문 급이니
우리보고 이런 대단한건 신경쓸 시간에 소녀시대 노래를 들으라고 하는거같다.그 대단한 박사 학위 논문 주제를 해주는 가비지 컬렉션을 알아보자.
위의 표는 대부분의 객체 들이 짧은 시간동안만 활동한다는것을 확인한 그래프 이다.
이를 통해 약한 세대 가설(weak generational hypothesis) 이 만들어졌고
객체의 대부분을 짧은 기간만 활동하기에
JVM 의 Heap 영역을 설계할때도
젊은 객체를 빠르게 수집할수있도록 설계하게 되었다.
JVM 의 힙 메모리 영영은 3개의 세션으로 나뉜다
새로 만들어진 젊은 객체 는 Young(New) Generation 공간에 존재 하게되며
Young Generation 영역은 3가지로 세분화가 된다.
- Eden Space
새로운 객체의 시작은 이 영역에서 시작된다 - To Space
젊은 객체들중 GC 에 의해 소멸되지 않은 젊은 객체가 이곳으로 이동한다 - From Space
젊은 객체들중 GC 에 의해 소멸되지 않은 젊은 객체가 이곳으로 이동한다
To Space 와 From Space 모두 Eden Space 에서 소멸하지 않은 젊은 객체들이 있는 공간인데
이를 합쳐서 Survivor Space 라고 부르기도 하고
각각 S0,S1 혹은 S1,S2 로 표기 하기도한다.
Young Generation 에서 동작하는 GC 를 Minor GC 라 부르며 아래와 같이 동작한다.
- Eden Space 가 가득차서 새로운 젊은 객체를 생성하지 못할때 동작한다.
- Minor GC 는 Eden Space에서 수명을 다한 객체를 회수한다.
- Minor GC 에서도 살아남은 객체들은 To Space 로 이동한다.
- Space를 이동한 객체들의 generational count가 증가한다.
- Eden Space 가 가득차서 동작한다.
- Minor GC 는 Eden Space에서 수명을 다한 객체를 회수한다.
- To Space 에서 Minor GC 에게 살아남은 객체들은 From Space 로 이동한다.
- Eden Space에서 Minor GC 에게 살아남은 객체들은 From Space 로 이동한다.
- Space를 이동한 객체들의 generational count가 증가한다.
- Eden Space 가 가득차서 동작한다.
- Minor GC 는 Eden Space에서 수명을 다한 객체를 회수한다.
- From Space 에서 Minor GC 에게 살아남은 객체들은 To Space 로 이동한다.
- Eden Space에서 Minor GC 에게 살아남은 객체들은 To Space 로 이동한다.
- Space를 이동한 객체들의 generational count가 증가한다.
결국 Minor GC 에게서 생존한 객체들은
한번은 ToSpace로, 한번은 FromSpace로 이동하게되는데
Survivor Space 가 두개인 이유는 메모리 단편화를 해결하여 연속된 메모리 공간을 확보하기 위함이다.
Minor GC 가 Eden Space 보다 Survivor Space 의 객체를 먼저 이동하는 이유는
Eden Space 보다 Survivor Space 안의 객체가 더 수명이 길 가능성이 있기때문이다
이렇게 Young Generation 에서 게속 살아남아 generational count 가 충분히 증가한 객체는
Old Generation 으로 이동한다.
Old Generation 에서 동작하는 Major GC 도 Old Generation이 꽉 찼을 때 수행된다.
또한 대부분 Old Generation은 Young Generation 보다 용량을 크게 잡기 때문에 객체의 갯수도 많아서 GC 시간이 길다.
가비지 컬렉션이 동작할때는 어플리케이션 스레드를 모두 멈추는 현상이 발생하며 이를 Stop the World 라 부른다.
따라서 GC 튜닝 이라고 하면 Stop the World 의 시간을 줄이는 일이고
Stop the World 의 시간을 줄이기위해서는 회수 해가는 젊은 객체의 수를 줄이면 되고
젊은 객체의 수를 줄이려면 젊은 객체의 영역을 줄이면 된다.
참고 및 출처
'Java' 카테고리의 다른 글
Java 의 Generic Type Erasure (0) 2023.08.31 - Eden Space