`

PhantomReference

阅读更多
PhantomReference


一、总结

1.jdk 1.8.0
2.定义
虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系。一个持有虚引用的对象,和没有引用几乎是一样的,随时都有可能被垃圾回收器回收。当试图通过虚引用的get()方法取得强引用时,总是会失败。并且,虚引用必须和引用队列一起使用,它的作用在于跟踪垃圾回收过程。

二、源码分析

/*
 * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.ref;


/**
 * Phantom reference objects, which are enqueued after the collector
 * determines that their referents may otherwise be reclaimed.  Phantom
 * references are most often used for scheduling pre-mortem cleanup actions in
 * a more flexible way than is possible with the Java finalization mechanism.
 *
 * <p> If the garbage collector determines at a certain point in time that the
 * referent of a phantom reference is <a
 * href="package-summary.html#reachability">phantom reachable</a>, then at that
 * time or at some later time it will enqueue the reference.
 *
 * <p> In order to ensure that a reclaimable object remains so, the referent of
 * a phantom reference may not be retrieved: The <code>get</code> method of a
 * phantom reference always returns <code>null</code>.
 *
 * <p> Unlike soft and weak references, phantom references are not
 * automatically cleared by the garbage collector as they are enqueued.  An
 * object that is reachable via phantom references will remain so until all
 * such references are cleared or themselves become unreachable.
 *
 * @author   Mark Reinhold
 * @since    1.2
 */

public class PhantomReference<T> extends Reference<T> {

    /**
     * Returns this reference object's referent.  Because the referent of a
     * phantom reference is always inaccessible, this method always returns
     * <code>null</code>.
     *
     * @return  <code>null</code>
     */
    public T get() {
        return null;
    }

    /**
     * Creates a new phantom reference that refers to the given object and
     * is registered with the given queue.
     *
     * <p> It is possible to create a phantom reference with a <tt>null</tt>
     * queue, but such a reference is completely useless: Its <tt>get</tt>
     * method will always return null and, since it does not have a queue, it
     * will never be enqueued.
     *
     * @param referent the object the new phantom reference will refer to
     * @param q the queue with which the reference is to be registered,
     *          or <tt>null</tt> if registration is not required
     */
    public PhantomReference(T referent, ReferenceQueue<? super T> q) {
        super(referent, q);
    }

}


分享到:
评论

相关推荐

    深入探讨 java-lang-ref 包.docx

    PhantomReference&lt;Bean&gt; phantom = new PhantomReference(new Bean("name", 10), queue); System.gc(); // 强制执行垃圾回收 System.out.println(phantom.get()); // null FinalReference 是一个特殊的引用类型,它...

    redis基础.rar

    周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度...

    Java中弱引用软引用虚引用及强引用的区别Java开发Ja

    - 示例:`PhantomReference&lt;String&gt; phantomRef = new PhantomReference(new String("PhantomReference Test"), new ReferenceQueue());` 理解这四种引用类型有助于开发者在设计和实现复杂系统时,更好地控制对象...

    Java 引用1

    PhantomReference&lt;String&gt; phantomRef = new PhantomReference(new String("hello"), referenceQueue); ``` 在`java.lang.ref`包中,有三个类分别对应这四种引用:`SoftReference`、`WeakReference`和`...

    深入探讨 java.lang.ref 包1

    本文将深入探讨这个包中的四种主要引用类型:StrongReference、SoftReference、WeakReference 和 PhantomReference,以及它们的特性、用法和作用。 首先,强引用(StrongReference)是我们在日常编程中最常见的引用...

    Java中的软引用弱引用和虚引用.docx

    PhantomReference&lt;String&gt; phantomReference = new PhantomReference(str, queue); str = null; // 断开强引用 System.gc(); // 请求GC // GC执行后,虚引用指向的对象已经被回收 // 通过ReferenceQueue检查虚...

    ThreadLocal,你真的了解吗?

    - 示例:`PhantomReference pr = new PhantomReference(new String("hello"), queue);` - 通常用于管理堆外内存,如 DirectByteBuffer,当对象将被回收时,可以做一些额外的清理工作。 ThreadLocal 工作原理: - ...

    Java禁止使用finalize方法共2页.pdf.zip

    - 使用** Cleaner / PhantomReference**:对于更复杂的情况,可以使用Cleaner或者PhantomReference来实现更精细的资源清理,但这种方式比直接使用try-finally更复杂,一般只在必要时使用。 5. Java 9及以后版本的...

    用java代码实现的移除未使用资源。.zip

    相比之下,`PhantomReference`配合引用队列可以更精确地控制资源的释放时机。 六、资源池 对于昂贵的资源,如数据库连接,通常使用连接池进行管理。连接池预先创建并维护一定数量的连接,供程序需要时复用,使用...

    JAVA GC 与 JVM调优1

    创建虚引用的代码示例:`PhantomReference&lt;Object&gt; pf = new PhantomReference(obj);` 理解这四种引用类型对于进行JVM调优至关重要,因为它们可以帮助我们控制对象的生命周期,防止内存泄漏,以及优化内存使用效率...

    SoftReference、WeakReference和PhantomRefrence分析和比较

    SoftReference、WeakReference和PhantomReference分析和比较 在 Java 中,引用类型分为强引用、软引用、弱引用和虚引用四种。强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种...

    Java 7之基础 - 强引用、弱引用、软引用、虚引用1

    - **例子**:` PhantomReference&lt;Object&gt; phantomRef = new PhantomReference(new Object(), new ReferenceQueue());` - **特点**:虚引用主要用来跟踪对象被垃圾收集的状态,通常不用于内存管理。 了解和正确...

    java 引用相关文档

    - 示例:`PhantomReference&lt;String&gt; phantomRef = new PhantomReference(new String("Hello"), new ReferenceQueue());` 这些引用类型的使用需要根据具体需求来选择。例如,软引用常用于缓存策略,以保持一定数量...

    Java的四种引用

    PhantomReference&lt;String&gt; phantomRef = new PhantomReference(str, queue); if (queue.poll() == null) { System.out.println("phantom reference is still valid."); } else { System.out.println("phantom ...

    Java引用总结--StrongReference、SoftReference、WeakReference、PhantomRef

    Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 &gt; 软引用 &gt; 弱引用...

    Java对象的引用.pdf

    然而,为了更细致地控制对象的生命周期,Java提供了一套特殊的引用类型,即弱引用(WeakReference)、软引用(SoftReference)和虚引用(PhantomReference),以及引用队列(ReferenceQueue)的概念,这些都定义在...

    软弱虚引用_转

    在Java的lang.ref包中,提供了SoftReference类、WeakReference类和PhantomReference类来分别代表软引用、弱引用和虚引用。此外,ReferenceQueue类表示引用队列,可以与这三种引用类联合使用,用于跟踪垃圾回收器回收...

    拓胜技术专家教你如何深入理解Java四种引用类型

    Java中的四种引用类型是Java内存管理的重要组成部分,它们分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。每种引用类型具有不同的特点和用途,...

    程序避免被GC 回收 --------引用

    PhantomReference&lt;Bitmap&gt; phantomRef = new PhantomReference(bitmap, referenceQueue); ``` 在这个例子中,`referenceQueue`是一个预先创建好的引用队列。当垃圾回收器准备回收`bitmap`时,会将`phantomRef`放入`...

Global site tag (gtag.js) - Google Analytics