当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java java.lang.ref.WeakReference用法及代码示例


当我们在Java中创建一个对象时,默认情况下对象并不是弱对象。要创建弱引用对象,我们必须向 JVM 显式指定它。

为什么使用弱引用对象:

与 C/C++ 不同,Java 支持动态垃圾收集。这是在 JVM 运行垃圾Collector时执行的。为了不浪费空间,垃圾Collector会删除所有无法访问的对象。然而,为了将对象标记为垃圾回收,我们可以创建一个弱引用对象。


Java


// Java Program to show the usage of 
// java.lang.ref.WeakReference Class
import java.lang.ref.WeakReference;
class GFG {
    public static void main(String[] args)
    {
        // creating a strong object of MyClass
        MyClass obj = new MyClass();
       
        // creating a weak reference of type MyClass
        WeakReference<MyClass> wobj
            = new WeakReference<>(obj);
        System.out.println(
            "-> Calling Display Function using strong object:");
        obj.Display();
        System.out.println("-> Object set to null");
        obj = null;
        obj = wobj.get();
        System.out.println(
            "-> Calling Display Function after retrieving from weak Object");
        obj.Display();
    }
}
class MyClass {
    void Display()
    {
        System.out.println("Display Function invoked ...");
    }
}
输出
-> Calling Display Function using strong object:
Display Function invoked ...
-> Object set to null
-> Calling Display Function after retrieving from weak Object
Display Function invoked ...
输出
-> Calling Display Function using strong object:
Display Function invoked ...
-> Object set to null
-> Calling Display Function after retrieving from weak Object
Display Function invoked ...

WeakReference 类中的构造函数:

参数 说明
WeakReference(T 指代) 此构造函数创建一个引用给定对象的新弱引用。
WeakReference(T 所指对象,ReferenceQueue <T> q) 此构造函数创建一个新的弱引用,该引用引用给定的对象并注册到给定的队列中。

从参考类继承的方法

方法 说明
清除 ( ) 该方法清除该引用对象。
入队 ( ) 此方法将此引用对象添加到它注册的队列(如果有)中。
得到 ( ) 该方法返回该引用对象的指示对象。
已入队 ( ) 此方法告知此引用对象是否已被程序或垃圾Collector排队。

方法的实施:

Java


// Java Program to show the usage of 
// java.lang.ref.WeakReference Class
import java.lang.ref.WeakReference;
class GFG {
    public static void main(String[] args)
    {
        X obj = new X();
        WeakReference<X> weakobj
            = new WeakReference<X>(obj);
        System.out.println(
            "-> Retrieving object from weak reference using get ()");
        weakobj.get().show();
        System.out.println(
            "-> Is it possible to queue object using enqueue ()");
        System.out.println(weakobj.enqueue());
        System.out.println(
            "-> Checking if reference is queued using isEnqueued ()");
        System.out.println(weakobj.isEnqueued());
    }
}
class X {
    void show()
    {
        System.out.println("show () from X invoked..");
    }
}
输出
-> Retrieving object from weak reference using get ()
show () from X invoked..
-> Is it possible to queue object using enqueue ()
false
-> Checking if reference is queued using isEnqueued ()
false


相关用法


注:本文由纯净天空筛选整理自varunkedia大神的英文原创作品 java.lang.ref.WeakReference Class In Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。