JVM垃圾收集器(串行,吞吐量優先)

JVM垃圾收集器(串行,吞吐量優先)


垃圾收集器就是內存回收的具體實現

一、串行的垃圾收集器

1、Serial收集器器(新生代收集器,串行GC)(複製)
在這裏插入圖片描述
特性

Serial收集器是最基本新生代收集器,這個收集器是一個單線程的收集器,但它的“單線程”的意義並不僅僅說明它只會使用一個CPU或一條收集線程去完成垃圾收集工作,更重要的是在它進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集結束(Stop The World).

垃圾回收的過程

先是所有的用戶線程進行運行,然後在進行垃圾回收時,其他的用戶線程都會在安全點停留,只有一個線程進行垃圾回收,然後其他的線程都會進行阻塞,直到垃圾回收線程收集結束之後,其他所有線程恢復運行。

應用場景

Serial收集器是虛擬機運行在Client模式下的默認新生代收集器。

優勢:

簡單而高效(與其他收集器的單線程比),對於限定單個CPU的環境來說,Serial收集器器由於沒有線程交互的開銷,專心做垃圾收集自然可以獲得最高的單線程收集效率。 實際上到現在爲止 : 它依然是虛擬機運行在Client模式下的默認新生代收集器。

2、Serial Old收集器(老年代收集器,串行GC)(標記+整理)

與之對應的老年代收集器就是Serial Old收集器,它同樣是一個單線程收集器,用的是標記加整理算法。

應用場景

Client模式 :Serial Old收集器的主要意義也是在於給Client模式下的虛擬機使用。

Server模式: 如果在Server模式下,那麼它主要還有兩大用途:一種⽤用途是在JDK 1.5以及之前的版本中與Parallel Scavenge收集器搭配使用,另一種用途就是作爲CMS收集器器的後備預案,在併發收集發生Concurrent Mode Failure時使用。

二、吞吐量優先的垃圾收集器

1,Parallel Scavenge收集器(新生代收集器,並行GC)(複製)
Parallel Scavenge收集器是⼀一個新生代收集器,它也是使用複製算法的收集器,又是並行的多線程收集器。

Parallel Scavenge收集器使用兩個參數控制吞吐量:
XX:MaxGCPauseMillis 控制最大的垃圾收集停頓時間
XX:GCRatio 直接設置吞吐量量的大小

直觀上,只要最大的垃圾收集停頓時間越小,吞吐量是越高的,但是GC停頓時間的縮短是以犧牲吞吐量和新生代空間作爲代價的。⽐比如原來10秒收集一次,每次停頓100毫秒,現在變成5秒收集一次,每次停頓70毫秒。停頓時間下降的同時,吞吐量也下降了。

應用場景

停頓時間越短就越適合需要與用戶交互的程序,良好的響應速度能提升用戶體驗,而高吞吐量則可以高效率地利⽤用CPU時間,儘快完成程序的運算任務,主要適合在後臺運算而不需要太多交互的任務

GC自適應的調節策略

Parallel Scavenge收集器器有一個參數**- XX:+UseAdaptiveSizePolicy** 。當這個參數打開之後,就不需要手工指定新生代的大小、Eden與Survivor區的比例、晉升老年代對象年齡等細節參數了了,虛擬機會根據當前系統的運⾏情況收集性能監控信息,動態調整這些參數以提供最合適的停頓時間或者最大的吞吐量,這種調節方式稱爲GC⾃自適應的調節策略(GC Ergonomics)

2,Parallel Old收集器(老年代收集器,並行GC)(標記+整理)

特性: Parallel Old是Parallel Scavenge收集器的⽼年代版本,使用多線程和“標記-整理”算法。

應用場景

在注重吞吐量以及CPU資源敏感的場合,都可以優先考慮Parallel Scavenge加Parallel Old收集器。

垃圾回收的過程
在這裏插入圖片描述
在多線程的情況下運行,有效的利用率cpu的資源

在多個線程進行運行時,要進行垃圾回收時,多個線程會停止到安全點,然後所有的線程都進行垃圾回收,然後回收完畢後都重新進行運行。

特點提高了cpu的使用效率,並且加大了吞吐量,就是停頓時間加長了,主要適用於不太進行交互的任務,並且吞吐量大的時候,還有一個GC 自適應調節策略,可以自己控制吞吐量以及最大停頓時間

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