my-server
← Wiki

Phantom reference

A phantom reference is a kind of reference in Java, where the memory can be reclaimed. The class is <code>java.lang.ref.PhantomReference</code>. The phantom reference is one of the strengths or levels of 'non strong' reference defined in the Java programming language; the others being weak and soft. Phantom reference are the weakest level of reference in Java; in order from strongest to weakest, they are: strong, soft, weak, phantom.

An object is phantomly referenced after it has been finalized.

In Java 8 and earlier versions, the reference needs to be cleared before the memory for a finalized referent can be reclaimed. A change in Java 9 will allow memory from a finalized referent to be reclaimable immediately.

Use

Phantom references are of limited use, primarily narrow technical uses. First, it can be used instead of a <code>finalize</code> method, guaranteeing that the object is not resurrected during finalization. This allows the object to be garbage collected in a single cycle, rather than needing to wait for a second GC cycle to ensure that it has not been resurrected. A second use is to detect exactly when an object has been removed from memory (by using in combination with a <code>java.lang.ref.ReferenceQueue</code> object), ensuring that its memory is available, for example deferring allocation of a large amount of memory (e.g., a large image) until previous memory is freed.

Example

See also

References