Java对象引用四个级别(强、软、弱、虚)
轉載自?Java對象引用四個級別(強、軟、弱、虛)
最近,高級Java技術棧微信群中,有一些猿友在討論JVM中對象的周期問題,有談到引用的級別,現在為大家做個總結吧,雖然大多數公司并沒有意識或者用到這些引用,但了解這些基本概念對熟悉整個垃圾回收機制和面試是非常有幫助的。
為了使程序能更加靈活地控制對象的生命周期,從JDK1.2版本開始,JDK把對象的引用級別分為了以下四種。
這4種級別由高到低依次為:
-
強引用(StrongReference)
強引用就是我們平常最基本的對象引用,如果是強引用,那回收器不會回收帶有強引用的對象。即使內存不足拋出OutOfMemoryError異常也不會回收強引用對象,存在即合理吧。
如:
User user = new User("Java技術棧"); user = new User("Java技術棧");這就是強引用,user持有了這個對象的存儲地址的引用。
-
軟引用(SoftReference)
一個對象只有軟引用,如果內存空間足夠情況下垃圾回收器就不會回收它,如果內存空間不夠了就會對這些只有軟引用的對象進行回收。只要垃圾回收器沒有回收,該軟引用對象就可以繼續被程序使用。
所以軟引用一般用來實現一些內存敏感的緩存,只要內存空間足夠,對象就會保持不被回收掉。
-
弱引用(WeakReference)
弱引用的對象具有更短暫的生命周期,在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由于垃圾回收器是一個優先級很低的線程,因此不一定會很快發現那些只具有弱引用的對象。
弱引用可以用來實現一些規范化映射,如WeakHashMap,當key或者value不再被引用時可以自動被回收。
-
虛引用(PhantomReference)
虛引用顧名思義就是形同虛設,虛引用并不決定對象的生命周期,如果一個對象僅持有虛引用,那么它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。
虛引用主要用來跟蹤對象被垃圾回收器回收的活動,虛引用必須和引用隊列(ReferenceQueue)聯合使用,當垃圾回收器準備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,把這個虛引用加入到與之關聯的引用隊列中。
下面通過一張表格來說明它們的回收時間、用途。
| 強引用 | 永不回收 | 普通對象引用 |
| 軟引用 | 內在不足回收 | 緩存對象 |
| 弱引用 | 垃圾回收時 | 緩存對象 |
| 虛引用 | 不確定 | 不確定 |
不管這些東西平時有沒有用到,我們都必須了解這些機制,這對個人的知識面及拓展是非常有幫助的。
?
總結
以上是生活随笔為你收集整理的Java对象引用四个级别(强、软、弱、虚)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6名最佳(简易)教师网站建设者#038名
- 下一篇: Java7任务并行执行神器:ForkJo