麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

對象死了嗎?

2019-11-15 00:01:09
字體:
供稿:網(wǎng)友
對象死了嗎?

垃圾收集器在對堆進行回收前,需要先判斷堆中哪些對象是“活著”的,哪些對象是“死了”的。

1.引用計數(shù)法

  給對象添加一個引用計數(shù)器,每當有一個地方引用它時,計數(shù)器加1,當引用失效時,計數(shù)器減1。任何時刻計數(shù)器為0的對象就是不可能再被使用的。

  引用計數(shù)器實現(xiàn)簡單,效率高。但是主流的JVM并沒有使用引用計數(shù)法來管理內(nèi)存,主要原因是它難以解決對象之間循環(huán)引用的問題。例如,對象objA和對象objB都有字段instance,令objA.instance=objB,objB.instance=objA,除此之外這兩個對象再無任何引用,實際上這兩個對象再無可能被訪問,但是因為兩個對象之間互相引用,兩者的引用計數(shù)器都不為0,引用計數(shù)法無法回收這兩個對象。

2.可達性分析算法

  JVM的主流實現(xiàn)是通過可達性分析來判斷對象是否存活的。這個算法的基本思路是通過一系列的稱為“GC Roots”的對象作為起點,從這些起點開始向下搜索,搜索所走過的路徑稱為引用鏈,當一個對象到GC Roots沒有任何引用鏈時,證明此對象是不可用的,將會成為可回收的對象。

  java中,可作為GC Roots的對象包括:

  • 虛擬機棧中引用的對象
  • 方法區(qū)中類靜態(tài)屬性引用的對象
  • 方法區(qū)中常量引用的對象
  • Native方法引用的對象

3.引用

  引用可以分為強引用(Strong Reference)、軟引用(Soft Reference)、弱引用(Weak Reference)和虛引用(Phantom Reference)四種。

  • 強引用是指代碼中普遍存在的,類似“Object obj=new Object()”這類的引用,只要強引用還存在,被引用的對象就永遠不會被垃圾收集器回收。
  • 軟引用用來描述一些還有用但非必須的對象。如果內(nèi)存空間足夠,垃圾回收器就不會回收它,如果內(nèi)存空間不足了,就會回收這些對象的內(nèi)存。軟引用可用來實現(xiàn)內(nèi)存敏感的高速緩存。軟引用可以和一個引用隊列(ReferenceQueue)聯(lián)合使用,如果軟引用所引用的對象被垃圾回收,JAVA虛擬機就會把這個軟引用加入到與之關聯(lián)的引用隊列中。
    // PRime holds a strong referenceCounter counter = new Counter();// soft reference variable has SoftReference to Counter Object primeSoftReference soft = new SoftReference(counter) ; // now Counter object is eligible for garbage collection // but only be collected when JVM absolutely needs memoryprime = null; 
  • 弱引用也是用來描述一些非必須的對象,但是引用強度比軟引用還要弱,被弱引用關聯(lián)的對象只能存活到下一次垃圾收集之前。一個使用弱引用的例子是WeakHashMap,它是除HashMap和TreeMap之外,Map接口的另一種實現(xiàn)。WeakHashMap有一個特點:map中的鍵值(keys)都被封裝成弱引用,也就是說一旦強引用被刪除,WeakHashMap內(nèi)部的弱引用就無法阻止該對象被垃圾回收器回收。
    Counter counter = new Counter(); // weak referenceWeakReference weak = new WeakReference(counter);// now Counter object is eligible for garbage collectioncounter = null;
  • 虛引用的對象可以在任何時候被垃圾回收器回收。

4.生存還是死亡

  一個對象真正死亡,至少要經(jīng)歷兩次標記過程。如果對象在可達性分析后發(fā)現(xiàn)沒有與GC Roots相連接的引用鏈,那它將會被第一次標記并且進行一次篩選,篩選條件是該對象是否有必要執(zhí)行finalize()方法。當對象沒有覆蓋finalize()方法或者finalize()方法已經(jīng)被虛擬機執(zhí)行過,則認為沒有必要執(zhí)行。如果對象有必要執(zhí)行finalize()方法,那么該對象會被放置到一個叫F-Queue的隊列中,并稍后由一個JVM自動建立的、低優(yōu)先級的Finalizer線程去執(zhí)行。這里的“執(zhí)行”指虛擬機有機會促發(fā)這個方法,但不承諾會等待其運行結(jié)束。finalize()方法是對象逃脫死亡的最后一次機會,稍后GC將對F-Queue中的對象進行第二次標記,如果對象在finalize()中將自己重新與引用鏈上的任意對象建立關聯(lián)(例如將自己this賦值給某個類變量或?qū)ο蟮某蓡T變量),那么第二次標記是將其移出需要回收的集合,否則該對象就真的會被回收了。

5.回收方法區(qū)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线观看91精品 | 欧美一级黄色影院 | 成人情欲视频在线看免费 | 亚洲欧美国产精品va在线观看 | 精品久久久久久综合日本 | 久久精品79国产精品 | 日韩视频―中文字幕 | 久久久婷婷一区二区三区不卡 | 日本中文字幕电影在线观看 | 久久精品一区二区三区四区五区 | 免费久久精品 | 日韩视频精品一区 | 午夜精品在线视频 | 毛片在线视频免费观看 | 国产成人高清成人av片在线看 | 国产羞羞视频 | 日韩大片在线永久观看视频网站免费 | 精品久久久一二三区播放播放播放视频 | 一级黄色影院 | 一区二区三区视频在线观看 | 久久久久久久一区二区 | 国产成人精品免费视频大全最热 | 成人国产精品一区 | hdbbwsexvideo| 欧美粗暴analvideos | 精品国产乱码一区二区三区四区 | 成人av一区二区免费播放 | 美女视频黄a视频免费全过程 | 久色porn| 成人爱爱电影 | 久久久一区二区三区四区 | 九九热在线精品视频 | 国产毛片aaa一区二区三区视频 | 精品国产中文字幕 | 久色视频网站 | 一区二区三级视频 | 久久激情免费视频 | 男女羞羞在线观看 | 国产羞羞视频在线免费观看 | 黄在线看 | 成人国产精品一区二区毛片在线 |