4.幾種常見的垃圾收集器

1.垃圾收集算法

標記-複製算法、標記-清理算法、標記-整理算法,這三種算法都是在分代收集的機制上成立的

標記-複製算法:

其原理是將內存分紅兩部分,一部份內存1放對象,一部份內存2爲空,當放對象的內存1進行垃圾回收時,會將仍然存活的對象標記起來,而後複製到另外一塊內存2中,再把內存1清空。而後進行第二次回收也是如此。這種方式常常在年輕代的垃圾回收中使用,即每次將被標記的仍然存活的對象放到另外一塊的survivor區中。此算法的缺點是:有一部份內存必須爲空,才能存放那些仍然存活的對象,若是在老年代中使用,很浪費內存。算法

標記-清理算法

其原理是將內存中仍然存活的對象標記起來,而後清理掉沒有被標記的對象(少數狀況下會標記那些須要清理的對象,而後去清除掉)。此算法的優勢是較上一種節省空間,缺點是,收集後的內存對象排列不整齊,會出現大量的不連續的垃圾碎片,二是,標記的對象過多,會很浪費時間。多線程

標記-整理算法

標記-整理算法即標記到那些仍然存活的對象,將這些對象都朝着一個區域移動,最後全部的對象都是在一塊鏈接的區域內,最後清理掉這個區域外的全部對象。清理後的內存都是連續的,而且不須要從新分配一塊空白內存。jvm

2.幾種常見的垃圾收集器

serial垃圾收集器

serial(串行)垃圾收集器,是單線程收集器,在執行垃圾收集時,會STW(stop the world),中止一切其餘的線程,是最先的垃圾收集器,用戶體驗不是很好,可是減小了與其餘線程的來回切換,因此很簡單高效(與其餘收集器的單線程相比)。
serial old收集器是serial的老年代版收集器,其做用是在jdk1.5及以前與Parallel Scavenge收集器搭配使用,另外一種用途是做爲CMS收集器的後備方案,當cms收集器出現「concurrent mode failure"時,會STW,並切換爲該收集器進行處理。線程

serial收集器是在新生代中使用,使用的是標記複製算法
serial old收集器在老年代使用,適用的是標記整理算法

Parallel Scavenge收集器

parallel Scavenge收集器是serial收集器的多線程版本,默認使用和cpu核數相同的線程數去進行垃圾回收,在jvm參數中加入
-XX:+UseParallelGC(年輕代),-XX:+UseParallelOldGC(老年代)分別使用相應的收集器。對象

新生代採用標記複製算法,老年代使用標記整理算法

Parallel Old收集器是Parallel Scavenge收集器的老年代版本。使用多線程和「標記-整理」算法。JDK8默認的新生代和老年代收集器是:Parallel Scavenge收集器和Parallel Old收集器()。內存

parNew 收集器

與parallel收集器類似,不一樣點是與cms搭配使用的收集器。原理

新生代採用標記複製算法,老年代使用標記整理算法

cms收集器與三色標記算法

G1收集器

zgc收集器

未完待續。。。~~~~用戶體驗

相關文章
相關標籤/搜索