jvm垃圾回收算法

1、怎么定義對象是垃圾
1)引用計數(shù)法
2)可達性分析
2、垃圾回收算法
1)Mark-Sweep 標記清除 缺點:碎片較多
2)Copying 復(fù)制算法 缺點:浪費一定空間
3)Mark-Compact 標記壓縮 效率最低
3、jvm對象的創(chuàng)建以及銷毀過程


jvm對象創(chuàng)建以及回收流程

3、垃圾回收器(大多數(shù)按照下列配套使用)
1)Serial(新生代) serialOld (老年代) 單線程
2)parallel Scavenge (新生代) Parallel old (老年代)多線程 并發(fā)
3)ParNew(新生代)CMS (concurrent mark sweep)(老年代) 并行

*CMS算法*
三色標記法(顏色是標記在對象的markword中)
白色:未被標記的對象
灰色:自身被標記,成員變量未被標記
黑色:自身和成員變量都被標記完成

CMS采用并行的方式進行垃圾回收,但是也會帶來一些問題;主要問題如下圖:
可能會出現(xiàn)誤刪有用對象的情況,如下圖:


CMS采用三色標記法可能出現(xiàn)的問題

解決方式:將A重新標成灰色 (Incremental update)
通過寫屏障的方式,當A.x = C且C是白色的時候,就將A置為灰色。

但是還是存在漏洞:如果A中有兩個成員變量 y1和y2,當A.y1被掃描完成后,接著執(zhí)行業(yè)務(wù)線程A.x = C將A變成灰色,但是標記線程接著掃描完y2,A還是變成了黑色,就不會再掃描C了,因此C就變成了垃圾;但是C是有被A使用的。針對這種情況,CMS在remark階段,必須從頭在掃一遍。
由于CMS存在的問題較多,G1垃圾回收器應(yīng)運而生。

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 許多高級編程語言都帶有自動垃圾回收特性,以將程序員從繁瑣復(fù)雜的內(nèi)存分配和釋放工作中解脫。本文將概述常見的垃圾回收算...
    kelgon閱讀 2,129評論 2 52
  • GC和GC Tuning GC的基礎(chǔ)知識 1.什么是垃圾 C語言申請內(nèi)存:malloc free C++: new...
    WhaleFall_0db7閱讀 443評論 0 0
  • 1jvm和jdk和jre分別指的是什么 jdk:javadevelopmentkitjava開發(fā)包包含jre和其他...
    文身特閱讀 320評論 0 0
  • 關(guān)于垃圾回收,主要回答兩個問題:哪些內(nèi)存需要回收、如何回收。 一、哪些內(nèi)存需要回收?- 對象存活判定算法 1. 堆...
    陳菲TW閱讀 455評論 0 0
  • 垃圾回收器 什么是垃圾對象? 沒有任何引用的對象。 如何發(fā)現(xiàn)垃圾對象? reference count 引用計數(shù)每...
    三不猴子閱讀 611評論 0 4

友情鏈接更多精彩內(nèi)容