Reachability

GC는 객체가 가비지인지 여부를 판단할때 Reachability 개념을 사용한다.

객체 참조는 또 다른 객체를 참조할 수 있으므로 객체들은 객체 사슬을 이룬다.

https://docs.oracle.com/javase/7/docs/api/java/lang/ref/package-summary.html#reachability

Strongly Reachable

Root set 으로부터 시작해서 어떤 reference object도 중간에 끼지 않은 상태로 참조 가능한 객체.

즉, 객체까지 도달하는 여러 참조 사슬 중 reference object가 없는 객체

Softly Reachable

Strongly Reachable 객체가 아닌 객체 중에서 Weak Reference, Phantom Reference 없이 Soft Reference만 통과하는 참조 사슬이 하나라도 있는 객체

Weakly Reachable

Strongly Reachable 객체, Softly Reachable 객체도 아닌 객체 중에서 Phantom Reference 없이 Weak Reference만 통과하는 참조 사슬이 하나라도 있는 객체

Phantomly Reachable

Strongly Reachable 객체, Softly Reachable 객체, Weakly Reachable 객체 모두 해당되지 않는 객체.

이 객체는 파이널라이즈(finalize)되었지만 아직 메모리가 회수되지 않은 상태이다.