PhantomReference — 팬텀 참조 클래스
PhantomReference — 팬텀 참조 클래스
PhantomReference는 가비지 컬렉터가 참조 대상(referent)이 회수될 수 있다고 판단한 뒤 참조 큐에 넣는 팬텀 참조 객체예요. 팬텀 참조는 대부분 사후 정리(post-mortem cleanup) 작업을 예약하는 데 사용돼요. 가비지 컬렉터가 어떤 시점에 객체가 팬텀 도달 가능(phantom reachable)하다고 판단하면, 그 객체에 대한 모든 팬텀 참조와 그 객체에서 도달 가능한 다른 팬텀 도달 가능 객체들에 대한 팬텀 참조를 원자적으로 해제해요. 그와 동시에 또는 나중에, 참조 큐에 등록된 새로 해제된 팬텀 참조들을 큐에 넣어요. 회수 가능한 객체가 계속 회수 가능하도록 보장하려면 팬텀 참조의 참조 대상은 가져올 수 없어요. 즉 팬텀 참조의 get 메서드는 항상 null을 반환해요. refersTo 메서드를 사용해 어떤 객체가 팬텀 참조의 참조 대상인지 테스트할 수 있어요.
본문
public PhantomReference(T referent, ReferenceQueue<? super T> q)
주어진 객체를 참조하고 주어진 큐에 등록되는 새 팬텀 참조를 만들어요. 큐를 null로 지정해도 되지만, 그러면 회수 시점을 알 수 없어 정리 작업 예약에 사용할 수 없어요.
public T get()
이 참조 객체의 참조 대상을 반환해요. 팬텀 참조의 참조 대상은 항상 접근할 수 없으므로, 이 메서드는 항상 null을 반환해요. 팬텀 참조가 참조하는 객체가 회수된 것을 refersTo가 아닌 get으로는 알아낼 수 없어요.