phantom reference

{{More citations needed|date=May 2009}}

A phantom reference is a kind of reference in Java, where the memory can be reclaimed. 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.{{cite web|title=java.lang.ref (Java Platform SE 8 )|url=https://docs.oracle.com/javase/8/docs/api/java/lang/ref/package-summary.html|website=Java™ Platform, Standard Edition 8 API Specification|publisher=Oracle|accessdate=6 August 2016}} 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{{cite web|last1=oracle.com|first1=kim barrett at|title=hg: jdk9/hs-rt/jdk: 8071507: (ref) Clear phantom reference as soft and weak references do|url=http://mail.openjdk.java.net/pipermail/jdk9-hs-rt-changes/2015-December/001914.html|date=28 December 2015}} will allow memory from a finalized referent to be reclaimable immediately.

Use

Phantom references are of limited use, primarily narrow technical uses.{{cite web |last=Nicholas |first=Ethan |url=http://weblogs.java.net/blog/2006/05/04/understanding-weak-references |title=Understanding Weak References |website=www.java.net|date=May 4, 2006 |accessdate=October 1, 2010 |url-status=dead |archiveurl=https://web.archive.org/web/20100819115659/http://weblogs.java.net/blog/2006/05/04/understanding-weak-references |archivedate=August 19, 2010 }} First, it can be used instead of a finalize 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 ReferenceQueue 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.

See also

References

{{Reflist}}

{{Java (Sun)}}

Category:Programming constructs

Category:Memory management

{{compu-lang-stub}}