虚引用
虚引用 是Java语言中的一种引用方式,在虚引用中,内存可以被回收。 虚引用是 Java语言中提供的非强引用的一种;其他两种分别是弱引用 和 软引用。[1] 虚引用是Java语言中最弱的一种引用。
在Java 8和早期版本中,finalize后的对象需要对应的软应用被回收后才可以被回收。 Java 9[2] 中允许finalize后的引用对象被立即回收。
用例
虚引用的应用场景,主要是少量的技术上的使用,[3] 主要用来跟踪对象被垃圾回收器回收的活动。首先,它可以用来代替 finalize
方法,保证对象在finalize时不会复活(resurrect)。 这允许对象在一个周期内完成垃圾回收,而不需要等待下一个垃圾回收周期以确保它没有复活。 第二个用途是来检测对象被回收的具体时间(通过与 ReferenceQueue
对象配合使用),确保其内存空间可用,例如延迟给新的对象分配内存(例如很大的图片),直到以前的内存被释放。
参见
- Ephemeron
- 弱引用
- 软引用
- 循环引用
参考文献
- ^ java.lang.ref (Java Platform SE 8 ). Java™ Platform, Standard Edition 8 API Specification. Oracle. [6 August 2016]. (原始内容存档于2021-05-07).
- ^ oracle.com, kim barrett at. hg: jdk9/hs-rt/jdk: 8071507: (ref) Clear phantom reference as soft and weak references do. 28 December 2015 [2019-01-22]. (原始内容存档于2019-08-14).
- ^ Nicholas, Ethan. Understanding Weak References. www.java.net. May 4, 2006 [October 1, 2010]. (原始内容存档于2010-08-19).