java四種引用

2021-08-28 01:56:21 字數 1004 閱讀 6535

1、強引用:諸如object a = new object();如果在乙個方法體內,只要方法沒結束,這個物件就不會被**。

2、軟引用:在將要丟擲out of memory之前首先會**已經無引用、不可達的物件。

3、弱引用:在gc時,就會**已經無引用、不可達的物件。

4、虛引用:任何時候可能被**,好像一般用來跟蹤物件**之類的,用的少。

需要注意的是,後面三種引用類都繼承了reference虛擬類,該類與成員變數referencequeue一起實現**與監聽作用。其中,staic方法會開啟乙個所有公用的執行緒,監控處理改變可達狀態的物件(active、pending、enqueued、inactive),不可達時**記憶體,並且如果queue不為null,會把reference子類自己放進去。

其中,軟引用可用快取記憶體,而弱引用用的較多,比如weakhashmap,

個人理解:weakhashmap該集合類的內部結構與hashmap相似(node table),但這裡entry繼承了弱引用類,並將key作為弱引用物件,呼叫父類構造方法傳到reference中。監聽到key記憶體被**後,繼承了reference的entry就被放入了queue中,在weakhashmap呼叫celar、put、size等方法時,就會檢測queue中的無效的entry並清除(這時候才真正**value的記憶體)。

/**

* the table, resized as necessary. length must always be a power of two.

*/entry table;

/*** reference queue for cleared weakentries

*/private final referencequeuequeue = new referencequeue<>();

private static class entryextends weakreferenceimplements map.entry

Java 的 四種引用

從jdk 1.2版本開始,把物件的引用分為4種級別,從而使程式能更加靈活地控制物件的生命週期。這4種級別由高到低依次為 強引用 軟引用 弱引用和虛引用。強引用 就算丟擲記憶體溢位也不會釋放的物件,如object object new object 軟引用 系統快要傳送記憶體溢位的時候,會將這些物件 ...

四種引用型別

在 j a 中最常見的就是強引用,把乙個物件賦給乙個引用變數,這個引用變數就是乙個強引用。當乙個物件被強引用變數引用時,它處於可達狀態,它是不可能被垃圾 機制 的,即使該物件以後永遠都不會被用到 jvm 也不會 因此強引用是造成 j a 記憶體洩漏的主要原因之一。軟引用需要用 softreferen...

Java中的四種引用型別分析

強引用 軟引用 弱引用 虛引用,接下來分別講一下他們的概念和我遇到過的實際應用型別。強引用就是我們平時使用的引用型別,只要指向物件的變數繼續存在,變數指向的物件就不會被 stringbuffer buffer new stringbuffer 弱引用,只要沒有任何其他強引用引用到這個弱引用指向的物件...