JVM对象已死
(一)?????? 引用計(jì)數(shù)法
每有一個(gè)引用就加1,每失效一個(gè)就減1,為0表示可回收;但是此方法無法解決相互引用的情況
(二)?????? 根搜索算法
從一系列的GCRoots對(duì)象為起點(diǎn)向下搜索,搜索的路徑稱為引用鏈,當(dāng)一個(gè)對(duì)象沒有任何引用鏈和GCRoots相連(也可以說成GCRoots到該對(duì)象不可達(dá)),則說明該對(duì)象可回收
1.????? 根搜索第一階段
1)?????? 與GCRoots之間沒有引用鏈將會(huì)被第一次標(biāo)記
2)?????? 判斷此對(duì)象是否有必要執(zhí)行finalize方法,以下是沒有必要執(zhí)行情況:
l?? 對(duì)象沒有覆蓋finalize方法
l?? Finalize方法已經(jīng)被虛擬機(jī)調(diào)用過
2.????? 兩個(gè)條件都滿足(必要執(zhí)行finalize方法)后會(huì)被放入名為F-Quene的隊(duì)列中
l?? 由虛擬機(jī)自動(dòng)建立的,低優(yōu)先級(jí)的finalizer線程機(jī)會(huì)觸發(fā),不等待執(zhí)行結(jié)束,否則可能因?yàn)閳?zhí)行緩慢或死循環(huán)影響內(nèi)存回收
l?? 除非再次被引用鏈連上,否則只能等待死亡
(三)?????? 引用
jdk1.2后分為:強(qiáng)引用,軟引用,弱引用,虛引用;強(qiáng)度逐漸減弱;垃圾回收器工作時(shí)無論內(nèi)存是否足夠,都會(huì)回收只被弱引用關(guān)聯(lián)的對(duì)象
1.????? 強(qiáng)引用
l?? 必需對(duì)象,不會(huì)被回收
l?? 類似新創(chuàng)建的對(duì)象:Object obj=new Object()
2.????? 軟引用
l?? 非必需對(duì)象
l?? 軟引用關(guān)聯(lián)著的對(duì)象在要發(fā)生內(nèi)存溢出之前會(huì)列為第二次回收對(duì)象,若內(nèi)存仍然不足才會(huì)拋出內(nèi)存溢出異常
3.????? 弱引用
l?? 非必需對(duì)象
l?? 弱引用關(guān)聯(lián)著的對(duì)象只能生存到下次垃圾收集前
4.????? 虛引用
l?? 也被稱為幽靈引用或幻影引用
l?? 設(shè)置虛引用的唯一目的就是希望關(guān)聯(lián)對(duì)象被回收時(shí)收到一個(gè)系統(tǒng)通知
l?? 不對(duì)對(duì)象生存時(shí)間產(chǎn)生影響,也無法被引用
轉(zhuǎn)載于:https://www.cnblogs.com/JavaTWW/p/11141283.html
總結(jié)
- 上一篇: bcp文件, 逗号文件
- 下一篇: 农业银行信用卡还款方式有哪些?这几种方式