當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。