PhantomReference
java 8和更少的 java doc 看起来像这样:
幻像引用对象,在收集器确定它们的引用对象可能会被回收后排队。幻影引用最常用于以比 Java 终结机制更灵活的方式调度事前清理操作。如果垃圾收集器在某个时间点确定幻影引用的所指对象是幻影可到达的,那么在那个时间或稍后的某个时间它将将该引用入队。
为了确保可回收对象保持不变,可能无法检索幻像引用的所指对象:幻像引用的 get 方法始终返回 null。
与软引用和弱引用不同,幻像引用在排队时不会被垃圾收集器自动清除。通过幻像引用可访问的对象将保持不变,直到所有此类引用都被清除或自身变得不可访问
PhantomReference
java 9及更高版本的 java doc 如下所示:
幻像引用对象,在收集器确定它们的引用对象可能会被回收后排队。幻影引用最常用于安排事后清理操作。假设垃圾收集器在某个时间点确定对象是幻影可达的。那时,它将自动清除对该对象的所有幻像引用以及对该对象可从中访问的任何其他幻像可访问对象的所有幻像引用。在同一时间或稍后的某个时间,它会将那些在引用队列中注册的新清除的幻像引用排入队列。
为了确保可回收对象保持不变,可能无法检索幻像引用的所指对象:幻像引用的 get 方法始终返回 null。
java 9 中的PhantomReference行为是否发生了变化?还是只是 java 创始人重新考虑了该课程的奉献精神?