(四)JVM-垃圾收集算法

垃圾回收算法的好壞直接影響到程序運行效率,接下來對幾種常見的回收算法進行介紹么夫。

標記-清除算法(Mark-Sweep)

該算法是最基礎的收集算法者冤,算法分“標記”和“清除”兩部分。 回收過程是標記出需要所有需要回收的對象档痪,在標記完成后統(tǒng)一回收被標記的對象

  • 不足
    1. 標記和清除兩個過程效率并不高涉枫。
    2. 標記清理過后會產生大量的不連續(xù)的碎片內存,空間內存碎片太多會導致在需要分配大對象時找不到合適的連續(xù)內存進行分配腐螟。這樣就會提前觸發(fā)一次垃圾回收動作愿汰。執(zhí)行過程如下圖:


      標記-清除算法示意圖

復制算法(Copying)

為了解決效率問題而出現(xiàn)了復制算法。它將內存劃分為大小兩塊相等的內存乐纸,每次只使用其中一塊衬廷,當這塊內存用完了就將還存活的對象復制到另一塊上,然后把剛剛那塊用完了的內存全部清理汽绢,每次都是對半個內存區(qū)域進行回收吗跋,所以在內存分配時不用考慮內存碎片的問題。


復制算法示意圖
  • 優(yōu)點
    算法實現(xiàn)簡單高效
  • 缺點
    將原來將原來可用內存縮小了一半,代價昂貴跌宛。

標記-整理算法(Mark-Compact)

復制算法在存活對象較多的情況下效率比較低酗宋,更關鍵的是不想浪費50%的內存空間,那么就需要有額外的空間進行分配擔保秩冈,已應對100%存活對象的這種極端情況本缠。因此在老年代使用標記-整理算法。

  • 算法過程
    標記過程和標記-清理算法一致入问,而后續(xù)步驟則先將所有存活的對象移至一端丹锹,然后直接清理掉端邊界以外的對象。


    標記-整理算法

分代收集算法(Generation Collection)

  • 堆內存劃分
    在 Java 中芬失,堆被劃分成兩個不同的區(qū)域:新生代 ( Young )楣黍、老年代 ( Old )。新生代 ( Young ) 又被劃分為三個區(qū)域:Eden棱烂、From Survivor租漂、To Survivor。


    20160818221750646.jpg

    在默認情況下

新生代 ( Young ) 與老年代 ( Old ) 的比例的值為 1:2 
Eden : from : to = 8 : 1 : 1 

JVM 每次只會使用 Eden 和其中的一塊 Survivor 區(qū)域來為對象服務颊糜,所以無論什么時候哩治,總是有一塊 Survivor 區(qū)域是空閑著的。
因此衬鱼,新生代實際可用的內存空間為 9/10 ( 即90% )的新生代空間业筏。
注 堆內存劃分 摘自: java堆內存劃分,詳情點鏈接查看

分代收集算法根據(jù)堆中對象生存周期的不同鸟赫,對各個區(qū)域采用不同的搜集算法蒜胖。在新生代中每次搜集都有大量的對象死去,少量的對象存活抛蚤,所以在這個區(qū)域采用“復制算法”台谢,而在老年代,對象存活率高岁经,沒有額外的內存分配擔保朋沮,那么它必須使用“標記-整理“或”標記-清除“算法。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末缀壤,一起剝皮案震驚了整個濱河市朽们,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诉位,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菜枷,死亡現(xiàn)場離奇詭異苍糠,居然都是意外死亡,警方通過查閱死者的電腦和手機啤誊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門岳瞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拥娄,“玉大人,你說我怎么就攤上這事瞳筏≈神” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵姚炕,是天一觀的道長摊欠。 經(jīng)常有香客問我,道長柱宦,這世上最難降的妖魔是什么些椒? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮掸刊,結果婚禮上免糕,老公的妹妹穿的比我還像新娘。我一直安慰自己忧侧,他們只是感情好石窑,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚓炬,像睡著了一般松逊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上试吁,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天棺棵,我揣著相機與錄音,去河邊找鬼熄捍。 笑死烛恤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的余耽。 我是一名探鬼主播缚柏,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碟贾!你這毒婦竟也來了币喧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤袱耽,失蹤者是張志新(化名)和其女友劉穎杀餐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朱巨,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡史翘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琼讽。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡必峰,死狀恐怖,靈堂內的尸體忽然破棺而出钻蹬,到底是詐尸還是另有隱情吼蚁,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布问欠,位于F島的核電站肝匆,受9級特大地震影響,放射性物質發(fā)生泄漏溅潜。R本人自食惡果不足惜术唬,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滚澜。 院中可真熱鬧粗仓,春花似錦、人聲如沸设捐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萝招。三九已至蚂斤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間槐沼,已是汗流浹背曙蒸。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岗钩,地道東北人纽窟。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像兼吓,于是被迫代替她去往敵國和親臂港。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容