JVM은 가비지 컬렉션(GC)을 어떻게 처리하나?

(1) (heap) 내의 객체 중에서 가비지(garbage)를 찾아낸다.

(2) 찾아낸 가비지를 처리해서 힙의 메모리를 회수한다.

JVM은 무엇을 기준으로 가비지를 선별하나?

reachability에 의해 결정된다.

유효한 참조가 있으면 reachability, 유효한 참조가 없으면 unreachability라고 하는데,

힙의 객체가 참조 되는 경우의 수는

(1) 스택영역에서 참조되는 경우

(2) 메소드영역에서 참조되는 경우

(3) 네이티브 스택(JNI)에서 참조되는 경우

(4) 힙내에서 참조되는 경우

 이렇게 4가지가 있는데, (1) ~ (3)까지를 root set 이라 하여 reachability, 즉 유효한 참조가 있다고 하고,

힙 내에서 있는 경우에는 unreachability라고 하여 유효하지 않은 참조로서 가비지 컬렉션의 대상이 된다.

원래의 jvm은 사용자 코드와 무관하게 gc가 일어나게끔 하였지만, 자바 버전이 높아지면서 일부 사용자의 코드가 gc에 반영될 수 있게 했다. soft, weak, phantom reference를 클래스 형태로 제공하면서 gc에 일부 참여할 수 있게 했다.

 

 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

자바 스레드 프로그래밍  (0) 2015.11.23
자바 예외 처리  (0) 2015.11.21
LinkedHashMap, TreeMap, HashMap  (0) 2015.11.07
Comparable 인터페이스에 대한 이해  (0) 2015.11.07
자바 Garbage Collection(GC) 튜닝  (0) 2015.11.07
Posted by slender ankles
,