jvm垃圾回收演算法:1、「標(biāo)記–清除」演算法;先標(biāo)記所有需要被回收的對象,然後在標(biāo)記完成後統(tǒng)一回收所有被標(biāo)記的對象。 2.複製演算法;將記憶體分割成等大的兩塊,每次只使用其中的一塊。 3.「標(biāo)記–整理」演算法;4、分代收集演算法。
本教學(xué)操作環(huán)境:windows7系統(tǒng)、java8版、DELL G3電腦。
JVM垃圾回收演算法
兩個概念:
##。新生代:存放生命週期較短的物件的區(qū)域。 老年代:存放生命週期較長的物件的區(qū)域。
相同點:都在Java堆上
1.標(biāo)記–清除演算法
#執(zhí)行步驟:
- #標(biāo)記:遍歷記憶體區(qū)域,標(biāo)記需要回收的物件。
- 清除:再次遍歷內(nèi)存,對已經(jīng)標(biāo)記過的內(nèi)存進行回收。
圖解:
缺點:
- 效率問題;遍歷了兩次記憶體空間(第一次標(biāo)記,第二次清除)。
- 空間問題:容易產(chǎn)生大量記憶體碎片,當(dāng)再需要一塊比較大的記憶體時,無法找到一塊符合要求的,因而不得不再次出發(fā)GC。
2.複製演算法
#將記憶體分割成等大的兩塊,每次只使用其中的一塊。當(dāng)一塊用完了,觸發(fā)GC時,將該區(qū)塊中存活的物件複製到另一塊區(qū)域,然後一次清理掉這塊沒有用的記憶體。下次觸發(fā)GC時將那塊中存活的的又複製到這塊,然後抹掉那塊,循環(huán)往復(fù)。
圖解:
##優(yōu)點
- #相對於標(biāo)記–清理演算法解決了記憶體的碎片化問題。
- 效率更高(清理記憶體時,記住首尾位址,一次抹掉)。
缺點:
- 記憶體使用率不高,每次只能使用一半記憶體。
改進
研究表明,新生代中的物件大都是「朝生夕死」的,即生命週期非常短而且對象活得越久則越難被回收。在發(fā)生GC時,需要回收的物件特別多,存活的特別少,因此需要移到另一塊記憶體的物件非常少,所以不需要1:1分割記憶體空間。而是將整個新生代依照8 : 1 : 1的比例分成三塊,最大的稱為Eden(伊甸園)區(qū),較小的兩塊分別稱為To Survivor和From Survivor。
首次GC時,只需要將Eden存活的物件複製到To。然後將Eden區(qū)整體回收。再次GC時,將Eden和To存活的複製到From,循環(huán)往復(fù)這個過程。這樣每次新生代中可用的記憶體就佔整個新生代的90%,大大提高了記憶體使用率。 【相關(guān)推薦:Java影片教學(xué)】
但無法保證每次存活的物件就永遠(yuǎn)少於新生代整體的10%,此時複製過去是存不下的,因此這裡會用到另一塊內(nèi)存,稱為老年代,進行分配擔(dān)保,將物件儲存到老年代。若還不夠,就會拋出OOM。
老年代:存放新生代中經(jīng)過多次回收仍存活的物件(預(yù)設(shè)為15次)。
3. 標(biāo)記–整理演算法
#因為前面的複製演算法當(dāng)物件的存活率比較高時,這樣一直複製過來,複製過去,沒啥意義,且浪費時間。所以針對老年代提出了「標(biāo)記整理」演算法。
執(zhí)行步驟:
- 標(biāo)記:標(biāo)記需要回收的
- #:讓存活的對象,向記憶體的一端移動,然後直接清除沒有用的記憶體。
圖解:
4. 分代收集演算法
目前大多商用虛擬機都採用這種分代收集演算法,這個演算法並沒有新的內(nèi)容,只是根據(jù)物件的存活的時間的長短,將記憶體分為了新生代和老年代,這樣就可以針對不同的區(qū)域,採取對應(yīng)的演算法。如:
- 新生代,每次都有大量物件死亡,有老年代作為記憶體擔(dān)保,採取複製演算法。
- 老年代,物件存活時間長,採用標(biāo)記整理,或標(biāo)記清理演算法都可。
MinorGC和FullGC的差異
#MinorGC:發(fā)生在新生代的垃圾回收,因為新生代的特點,MinorGC非常頻繁,且回收速度比較快,每次回收的量也很大。
FullGC:發(fā)生在老年代的垃圾回收,也稱為MajorGC,速度比較慢,相對於MinorGc慢10倍左右。進行一次FullGC通常伴隨多次多次MinorGC,。
更多程式相關(guān)知識,請造訪:程式設(shè)計影片! !
以上是jvm垃圾回收演算法有哪些的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)