日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

什么是jvm垃圾?jvm垃圾回收機(jī)制有幾種

問題1:哪些是需要回收的?
首先我們需要知道如何哪些垃圾需要回收?判斷對(duì)象是否需要回收有兩種算法 。一種是引用計(jì)數(shù)算法、一種是可達(dá)性分析算法 。

什么是jvm垃圾?jvm垃圾回收機(jī)制有幾種


引用計(jì)數(shù)算法
引用計(jì)數(shù)算法很簡(jiǎn)單,它通過記錄對(duì)象被引用的次數(shù)從而判斷該對(duì)象的重要程度 。如果該對(duì)象被其它對(duì)象引用,則它的引用計(jì)數(shù)加一,如果刪除對(duì)該對(duì)象的引用,那么它的引用計(jì)數(shù)就減一,當(dāng)該對(duì)象的引用計(jì)數(shù)為0時(shí),那么該對(duì)象就會(huì)被回收 。
 
引用計(jì)數(shù)存在什么問題呢?當(dāng)有兩個(gè)對(duì)象相互引用時(shí),由于它們互相引用對(duì)方所以計(jì)數(shù)都不為零,這就會(huì)導(dǎo)致這兩個(gè)對(duì)象無法回收 。
 
所以,Java虛擬機(jī)采用的是另一種方法來判斷對(duì)象是否存活,它就是可達(dá)性分析算法 。
 
可達(dá)性分析算法
可達(dá)性分析算法,首先要確定一系列根對(duì)象(GC Roots),并從根對(duì)象為起點(diǎn)根據(jù)對(duì)象之間的引用關(guān)系搜索出一條引用鏈(Reference Chain),在引用鏈的對(duì)象就存活,而不在引用鏈的對(duì)象就認(rèn)定為可回收對(duì)象 。
 
有一個(gè)比喻十分恰當(dāng):可達(dá)性分析算法就好比是在清洗葡萄串,我們可以從一根枝提起一大串葡萄,他們就像一串引用鏈,而沒有和引用鏈相連的對(duì)象就像是散落在池子里的葡萄,可以回收 。
 
虛擬機(jī)棧中引用的對(duì)象(正在運(yùn)行的方法使用到的變量、參數(shù)等)
 
方法區(qū)中類靜態(tài)屬性引用的對(duì)象(static關(guān)鍵字聲明的字段)
 
方法區(qū)中常量引用的對(duì)象,(也就是final關(guān)鍵字聲明的字段)
 
本地方法棧中引用的對(duì)象(native方法)
 
Java虛擬機(jī)內(nèi)部的引用 。(系統(tǒng)內(nèi)部的東西當(dāng)然能作為根了)
 
問題2:有哪些重要的垃圾回收算法?
學(xué)會(huì)判斷內(nèi)存中哪些垃圾需要回收后,我們就需要掌握幾個(gè)重要的垃圾回收算法 。
 
標(biāo)記-清除算法
標(biāo)記-清除法是最基本的一種垃圾回收算法,總的來說分為兩步:
標(biāo)記所有需要回收的對(duì)象(灰色),也就是在做垃圾的判定 。
 
將標(biāo)記為灰色的部分,清除掉 。
 
需要注意的是:所謂的清除,并不需要真正地把整個(gè)內(nèi)存的字節(jié)進(jìn)行清零操作,只需要把空閑對(duì)象的起始結(jié)束地址記錄下來放入空閑列表里,表示這段內(nèi)存是空閑的就行 。
優(yōu)點(diǎn)速度快,只需要做個(gè)標(biāo)記就能知道哪一塊需要被回收,但是他的缺點(diǎn)也是致命的 。
 
他的主要缺點(diǎn)有兩個(gè):一是執(zhí)行效率不穩(wěn)定,二是會(huì)涉及到內(nèi)存碎片化的問題 。
 
可能有人會(huì)問,碎片化是什么意思呢?上面所描述的這個(gè)棧,通過標(biāo)記清除法雖然是清除了空間,但是清除出來的內(nèi)存是大量的不連續(xù)內(nèi)存碎片,像下面的這塊對(duì)象,明明整體都有位,卻因?yàn)椴贿B續(xù)無法放入,這是標(biāo)記-清除算法最大的缺點(diǎn) 。
 
所謂標(biāo)記復(fù)制算法和標(biāo)記整理算法,都是對(duì)標(biāo)記清除算法缺點(diǎn)的改進(jìn),所以才說標(biāo)記清除算法是最基礎(chǔ)的方式 。
 
標(biāo)記-整理算法
與標(biāo)記-清除算法不同,標(biāo)記-整理算法是移動(dòng)式的 。他會(huì)讓所以存活的對(duì)象都向內(nèi)存空間一端移動(dòng),然后清除到邊界以外的內(nèi)存 。
 
是什么樣的弊端呢?標(biāo)記-整理算法涉及到了對(duì)象的移動(dòng),在整理階段,由于移動(dòng)了可用對(duì)象,需要去更新引用 。效率就低了 。
 
標(biāo)記-復(fù)制算法
標(biāo)記-復(fù)制算法,相比前面的比較不同,他將內(nèi)存空間分為兩塊,在垃圾回收時(shí)將正在使用的內(nèi)存中的存活對(duì)象復(fù)制到未被使用的內(nèi)存塊中,然后呢再清除正在使用的內(nèi)存塊中的所有對(duì)象 。最后再交換兩個(gè)內(nèi)存的角色,最后完成垃圾回收 。

推薦閱讀