【JVM】GC垃圾回收

JVM在進行GC時,並不是新生代、老年代一起進行,大部分都是在新生代中回收,GC又分爲Minor GC和Major GC。

Minor GC 和 Major GC 區別

Minor GC:
只針對新生代區域,指的是發生在新生代中的垃圾收集,由於大多數對象存活率不高,所有Minor GC非常頻繁,回收速度快。


Major GC: 指的是發生在老年代的垃圾收集,出現Major GC時,經常會伴隨至少一次的Minor GC。Major GC掃描空間較大,速度較慢。
GC四大算法

1.引用計數法(一般不使用):

使用該方法進行GC時,每個對象中會攜帶一個引用計數器,每當對象被引用就+1,結束引用就-1。直到對象的引用計數器爲0,說明該對象沒有被使用,回收對象。

缺點:每次對象賦值時需要維護引用計數器;較難處理循環引用。


2.複製算法(From、To):

複製算法在年輕代中使用,基本思想是將內存分成兩塊,每次只用其中一塊,當一塊內存用完,將活着的對象複製到另一個塊上。

優點:速度快,不會產生內存碎片。
缺點:消耗內存空間。


3.標記清除:

標記清除發生在老年代,分成標記和清楚兩個階段,先標記出需要回收的對象,然後統一進行回收。

優點:不需要額外空間。
缺點:兩次掃描,耗時,會產生內存碎片。


4.標記壓縮:

標記壓縮發生在老年代,一般是由標記清楚與標記整理混合實現。首先與標記清除相同, 回收後再次掃描,整理存活對象。

優點:不會產生內存碎片。
缺點:需要移動存活對象,消耗成本,耗時。


沒有最好的垃圾回收算法,只有最合適的,在不同代中使用不同垃圾回收算法,也稱分代收集算法。

內存效率:複製算法>標記清除算法>標記整理算法
內存整齊度:複製算法=標記整理算法>標記清除算法
內存利用率:標記整理算法=標記清除算法>複製算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章