您好,登錄后才能下訂單哦!
這篇文章主要介紹“JVM垃圾回收有哪些常用算法”,在日常操作中,相信很多人在JVM垃圾回收有哪些常用算法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JVM垃圾回收有哪些常用算法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
垃圾回收:
在未來的JDK中可能G1會為ZGC所取代
先問自己幾個問題:
什么是垃圾?
垃圾就是堆內(nèi)存中(范指)沒有任何指針指向的對象實體。不具有可達(dá)性。
為什么要回收垃圾?
因為我們的內(nèi)存是有限的,內(nèi)存長時間不清理就會導(dǎo)致內(nèi)存溢出,OOM;
只要是程序正在跑,那么就不斷生成新的對象,我們需要GC開辟新的空間分配給新的對象。
我們怎么回收垃圾?
依靠Java的自動內(nèi)存回收機(jī)制,機(jī)制的優(yōu)劣由算法決定;
或者說是機(jī)制的適配度由算法和應(yīng)用場景共同決定。
什么時候回收垃圾?
當(dāng)堆中的實體對象沒有任何指針指向的時候
標(biāo)記&清除
1、引用計數(shù)(Reference Counting):
Java已經(jīng)擯棄了這種算法,因為此算法需要的額外處理過多
【優(yōu)】效率高,python也在用,就像論文的引用因子一樣,沒有用的文章就應(yīng)該多多回收,清理學(xué)術(shù)垃圾。
【缺】無法處理對象的相互“循環(huán)引用”,一旦形成了引用環(huán),就沒有辦法去解決。進(jìn)而造成內(nèi)存泄漏。
2、可達(dá)性分析?(根搜索、Tracing Garage Collection):
GC Roots = 起始節(jié)點集,從GC Roots開始向下搜索,連接的路徑為引用鏈,GC Roots不可達(dá)的對象被判為不可用。
哪些是GC Roots?
虛擬棧上的棧幀的局部變量表引用的對象;
方法區(qū)上常量引用
方法區(qū)上靜態(tài)變量
被同步鎖修飾的對象
除了堆區(qū),和堆有聯(lián)系的都是起始節(jié)點……
【優(yōu)】解決了循環(huán)引用的缺點
【缺】需要遍歷
標(biāo)記清除算法
復(fù)制算法
標(biāo)記清除整理算法
標(biāo)記-清除算法:
先mark可達(dá)對象,從根節(jié)點開始進(jìn)行線性遍歷。
【優(yōu)】夠平均
【缺】效率不高,GC的時候?qū)е耂TW,清楚后存在內(nèi)存碎片(會存在一個空閑列表)
這是最快的清除算法
復(fù)制算法
先把空間分為兩個部分,把標(biāo)記的對象規(guī)整地移到另一個空間中(指針碰撞的方式)
【優(yōu)】高效,無需mark/sweep;沒有內(nèi)存碎片;
【缺】犧牲了大量的空間,”最好你們?nèi)渴抢 ?/p>
標(biāo)記-清除-整理算法
在標(biāo)記之后清除完了再進(jìn)行整理,屬于標(biāo)記清除算法的優(yōu)化版,無空閑列表
【優(yōu)】無空閑列表,無內(nèi)存碎片;空間開銷低
【缺】時間慢,需要進(jìn)行多次操作。
finalization——免死金牌
finalize是給GC調(diào)用的
【問】回收的時候會涉及到哪些操作?會伴隨著什么狀態(tài)?
可觸及:正常狀態(tài),在GC Roots的引用鏈上;
可復(fù)活:需要重寫finalize方法才有的,“皇帝賜給你的重寫finalize方法”
不可觸及:finalize免死金牌只能用一次,如果沒有重寫的finalize方法,那么就直接掛了。
MAT & GC Roots:
Memory Analyzer Tools 內(nèi)存分析工具
分析dump文件:根據(jù)GC Roots去溯源,監(jiān)控內(nèi)存泄漏→ JProfiler
分區(qū)算法
將堆空間分成小空間是為了降低停頓時間,降低延遲
實際的使用都是復(fù)合算法。
String
final是寫死的,不能繼承也不能做任何修改;
Serializable修飾是跨進(jìn)程
Comparable可比較的
到此,關(guān)于“JVM垃圾回收有哪些常用算法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。