首頁 > Java > java教程 > Java 參考資料

Java 參考資料

PHPz
發布: 2024-08-30 15:17:41
原創
966 人瀏覽過

Java語言的優點之一是它自動管理內存,程式設計師無需承擔內存管理的負擔,也無需擔心當不再需要對象時釋放對象的內存。 java垃圾收集器線程為程式設計師做這件事;它在JVM的控制下清除不需要的物件並釋放記憶體。程式設計師還可以透過使用 java.lang.ref 類別來控制何時對物件進行垃圾收集。 java 中的引用有四種類型,取決於垃圾收集的方式或垃圾收集器對引用的行為。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

Java 參考類型及範例

根據垃圾收集器對引用的行為,Java 引用有四種類型。

  • 強引用:這是java的預設引用。定期定義物件時可以建立強引用。
  • 弱引用: 此引用將被明確指定。可以使用 java.lang.ref.WeakReference 類別建立弱引用。
  • 軟引用:可以使用 lang.ref.SoftReference 類別建立軟引用。
  • 幻象引用:可以使用 lang.ref.PhantomReference 類別建立幻象引用。

1.強引用

強引用通常是我們在寫java程式碼或建立物件時使用的。具有強引用且在記憶體中處於活動狀態的物件不符合垃圾回收條件,強引用指向 null 的物件可以被垃圾回收。例如,下面的程式碼片段,其中變數 ob 是 ClassA 類型的物件。

ClassA ob = new ClassA();
登入後複製
登入後複製

「ob」物件具有指向類別 ClassA 的強引用;該物件無法被垃圾回收,因為 ob 是活動物件。

如果引用「ob」指向 null,如下 –

ob = null;
登入後複製

現在該物件不再引用 ClassA 類別;物件現在符合垃圾回收條件。

範例

代碼:

package p1;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA(); // default reference or Strong Reference
System.out.println(ob);
ob = null; // Now object <u>ob</u> pointing to null and is available for garbage collection
System.out.println(ob);
}
}
登入後複製

輸出:

Java 參考資料

2.弱引用

弱引用符合垃圾回收條件。一旦 JVM 偵測到弱引用的對象,就會對該物件進行標記,並在 JVM 執行垃圾收集器執行緒時收集垃圾。這些類型的引用在 WeakHashMap 中用於物件的條目。弱引用可以透過類別 lang.ref.WeakReference 來建立。應用程式中可以使用的弱引用是建立 DBConnection,一旦資料庫關閉,垃圾收集器就會釋放該連線。例如,下面的程式碼片段,其中變數 ob 是 ClassA 類型的物件。

ClassA ob = new ClassA();
登入後複製
登入後複製

「ob」物件是一個強引用,使其可被垃圾回收,我們需要將其尊重轉換為弱引用,如下所示 –

WeakReference<ClassA> weakob = new WeakReference<ClassA>(ob);
登入後複製

現在該物件弱引用了 ClassA 類,該物件現在可用於垃圾回收,並且當 JVM 運行垃圾回收執行緒時該物件將被垃圾回收。

範例

代碼:

package p1;
import java.lang.ref.WeakReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();  // default reference or Strong Reference
System.out.println(ob);
// now create Weak Reference object to which <u>ob</u> object is pointing
WeakReference <ClassA> weakob = new WeakReference <ClassA>(ob);
// Now <u>ob</u> object is eligible for garbage collection, but it will be remove from memory when JVM needs memory
ob = null;
System.out.println(ob);
// weakly referenced <u>ob</u> object can get back
ob = weakob.get();
System.out.println(ob);
}
}
登入後複製

輸出:

Java 參考資料

3.軟參考

軟體引用的物件只有在 JVM 記憶體不足或 JVM 急需記憶體時才符合垃圾回收的條件。弱引用可以透過類別 lang.ref.SoftReference 建立。例如,軟引用可以創建類似於弱引用的內容。

SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
登入後複製
範例

代碼:

package p1;
import java.lang.ref.SoftReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();// default reference or Strong Reference
System.out.println(ob);
// now create soft Reference object which ob object is pointing
SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
// Now ob object is eligible for garbage collection, but it will be garbage collected when JVM badly needs memory
ob = null;
System.out.println(ob);
// the soft referenced, ob object can get back
ob = softob.get();
System.out.println(ob);
}
}
登入後複製

輸出:

Java 參考資料

4.幻影參考

幻像所引用的物件可以被垃圾回收,但在垃圾回收之前,該物件被 JVM 放入名為「引用佇列」的參考佇列中;在物件上呼叫 Finalize() 函數之後。弱引用可以透過類別 lang.ref 建立。幻影參考。

範例

代碼:

package p1;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.PhantomReference;
class ClassA
{
// something
}
public class Demo {
public static void main( String[] arg )
{
ClassA ob = new ClassA();  // default reference or Strong Reference
System.out.println(ob);
// now Create Reference queue object
ReferenceQueue <ClassA> refq = new ReferenceQueue <ClassA>();
// Create Phantom Reference object to which <u>ob</u> object is pointing
PhantomReference <ClassA> phantomob = new PhantomReference <ClassA>(ob,refq);
// Now <u>ob</u> object is eligible for garbage collection, but it will be kept in '<u>refq</u>' before removing
ob = null;
System.out.println(ob);
// to get back object which has been Phantom referenced returns null
ob = phantomob.get();
System.out.println(ob);
}
}
登入後複製

輸出:

Java 參考資料

以上是Java 參考資料的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板