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