Language Basics Java Book

The PhantomReference class describes a Reference object whose referent is phantom reachable.
The following code shows how to use PhantomReference to detect the finalization of a large object.

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
class LargeObject {
private byte[] data = new byte[1024 * 1024 * 50]; // 50 megabytes
private byte[] data2 = new byte[1024 * 1024 * 50]; // 50 megabytes

}
public class Main {
public static void main(String[] args) {
ReferenceQueue rq = new ReferenceQueue();
PhantomReference pr = new PhantomReference(new LargeObject(), rq);
while (rq.poll() == null) {
System.out.println("waiting for large object to be finalized");
byte[] b = new byte[1024 * 1024 * 50]; // 50 megabytes
}
System.out.println("large object finalized");
System.out.println("pr.get() returns " + pr.get());
}
}