java的四大引用型別
Java中的引用型別有四個級別
分別為強引用 軟引用 弱引用和虛引用
強引用:
比如一個物件被強引用了,那麼垃圾回收機制絕對不會回收它,寧願丟擲 OutOfMemoryError 錯誤,使程式異常終止。
軟引用:
如果一個物件只具有軟引用,那麼如果記憶體空間足夠的時候,垃圾回收器就不會回收它,如果記憶體空間不夠了,就會回收這些物件的記憶體,只要垃圾回收器沒有回收,改物件就可以被程式使用。
主要用於記憶體敏感的快取記憶體。在 jvm 報告記憶體不足之前會清除所有的軟引用,這樣以來 gc 就 有可能收集軟引用的物件,可能解決記憶體吃緊問題,避免記憶體溢位。
弱引用:
如果一個物件只具有弱引用,那該類就是可有可無的物件,因為只要該物件被 gc 掃描到了隨時都會把它幹掉。弱引用與軟引用的區別在於:只具有弱引用的物件擁有更短暫的生命週期。在垃圾回收器執行緒掃描它所管轄的記憶體區域的過程中,一旦發現了只具有弱引用的物件,不管當前記憶體空間足夠與否,都會回收它的記憶體。不過, 由於垃圾回收器是一個優先順序很低的執行緒, 因此不一定會很快發現那些只具有弱引用的物件。
虛引用:
虛引用並不會決定物件的生命週期。如果一個物件僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收。虛引用主要用來跟蹤物件被垃圾回收的活動**。**
虛引用必須和引用佇列(ReferenceQueue)聯合使用。當垃圾回收
器準備回收一個物件時,如果發現它還有虛引用,就會在回收物件的記憶體之前,把這個虛引用加入到與之關聯的引用
佇列中。程式可以通過判斷引用佇列中是否已經加入了虛引用,來了解被引用的物件是否將要被垃圾回收。程式如果發現
**某個虛引用已經被加入到引用佇列,那麼就可以在所引用的物件的記憶體被回收之前採取必要的行動
相關文章
- Java的基本型別和引用型別Java型別
- JAVA 基本型別與 引用型別區別Java型別
- Java引用型別原理剖析Java型別
- Java引用型別與WeakHashMapJava型別HashMap
- Java中的四種引用型別Java型別
- Java引用型別解析:掌握強引用、軟引用、弱引用和幻象引用的妙用Java型別
- 詳聊Java的四種引用型別Java型別
- Java基本資料型別和引用型別 - Java那些事兒Java資料型別
- Java中的基本資料型別與引用資料型別Java資料型別
- Java中的引用型別和使用場景Java型別
- 引用型別型別
- Java四大引用詳解:強引用、軟引用、弱引用、虛引用Java
- Go 的引用型別Go型別
- 值型別與引用型別的區別型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- java四大引用總結Java
- Java中的四大引用筆記Java筆記
- C#的型別——值型別與引用型別C#型別
- 值型別和引用型別型別
- JavaScript引用型別-Object型別JavaScript型別Object
- 值型別與引用型別型別
- 面試官:Java物件引用都有哪些型別?面試Java物件型別
- js引用型別JS型別
- javascript:引用型別JavaScript型別
- JavaScript的原生引用型別JavaScript型別
- 什麼是java四大引用?Java
- JavaScript值型別和引用型別JavaScript型別
- c#:值型別&引用型別C#型別
- ECMAScript 原始型別與引用型別型別
- Swift值型別和引用型別Swift型別
- c#中值型別和引用型別的區別C#型別
- 基礎篇:JAVA引用型別和ThreadLocalJava型別thread
- js基本型別和引用型別區別JS型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- 引用型別的深拷貝型別
- Golang 引用型別-mapGolang型別
- 引用型別之Object型別Object