여름의 서재

[JAVA] Garbage Collection 본문

Skill/JAVA

[JAVA] Garbage Collection

엉아_ 2022. 1. 23. 20:01
728x90

💡 Garbage Collection 이란?

: 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기능.

 

💡 Stop The World

: GC 실행을 위해 JVM이 애플리케이션 실행을 멈추는 것이다. GC가 실행 될 때는, GC를 실행하는 쓰레드를 제외한 모든 스레드들이 작업을 멈춘다. GC 작업이 완료한 이후에야 중단했던 작업을 다시 시작한다. 대개의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것을 말한다.

 

💡 GC 동작 방식

: GC의 과정을 Mark and Sweep이라고도 한다. GC가 스택의 모든 변수 또는 Reachable 객체를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾는 과정이 Mark라고 한다. 이 과정에서 Stop the world가 발생한다. 이후 Mark 되어있지 않은 객체들을 힙에서 제거하는 과정이 Sweep이다. (어떤 객체에 유효한 참조가 있으면 'reachable', 없으면 'unreachable'로 구별하고 'unreachable'객체를 가비지로 간주한다.)

 

- Minor GC :  Eden 영역이 가득 참에서 부터 시작됩니다. Eden 영역에서 참조가 남아있는 객체를 mark하고 survivor 영역으로 복사합니다. 그리고 Eden 영역을 비웁니다. Survivor 영역도 가득차면 같은 방식으로 다른 Survivor 영역에 복사하고 비웁니다. 이를 반복하다 보면 계속 해서 살아남는 객체는 old 영역으로 이동하게 됩니다.

 

- Major GC : old 영역에서 일어납니다. 위와 반대로 삭제되어야 하는 객체를 mark합니다. 그리고 지웁(sweep)니다. 메모리는 단편화 된 상태이므로 이를 한 군데에 모아주는 것을 Compaction이라 하며 compact라고 합니다. 그래서 Mark-Sweep-Compact 알고리즘이라고 합니다.

 

참고: https://beststar-1.tistory.com/15

'Skill > JAVA' 카테고리의 다른 글

[JAVA] JVM & JVM 메모리 구조  (0) 2022.01.23
Comments