JVM垃圾收集器-ParNew收集器
阿新 • • 發佈:2019-01-13
今天我給大家講講ParNew收集器。
ParNew收集器
ParNew收集器收集器其實就是Serial收集器的多執行緒版本,除了使用多執行緒進行垃圾收集之外,其餘行為包括Serial收集器可用的所有控制引數、收集演算法、Stop The world、物件分配規則、回收策略等都與Serial收集器完全一樣,實現上這兩種收集器也共用了相當多的程式碼。ParNew收集器的工作過程如下圖所示。
ParNew收集器除了多執行緒收集之外,其他與Serial收集器相比並沒有太多創新之處,但它卻是許多執行在Server模式下的虛擬機器中首選的新生代收集器,其中有一個與效能無關但很重要的原因是,除了Serial收集器外,目前只有它能與CMS收集器配合工作。在JDK1.5時期,HotSpot退出了一款在強互動應用中幾乎可成為有劃時代意思的垃圾收集器————CMS收集器,這款收集器是HotSpot虛擬機器中第一款真正意義上的併發收集器,它第一次實現了讓垃圾收集執行緒與使用者執行緒同時工作,用前面那個例子的話來說,就是做到來在你媽媽打掃房間的時候你還能同時往地上扔紙屑。
ParNew收集器在單CPU的環境中絕對不會有比Serial收集器更好的效果,甚至由於存線上程互動的開銷,該收集器在通過多執行緒技術實現兩個CPU環境中都不能百分百地保證能超越Serial收集器。當然,隨著可用使用的CPU數量的增加,它對於GC時系統資源的利用還是很有好處的。它預設開啟收集執行緒數與CPU的數量相同,在CPU非常多的環境下,可用使用-XX:ParallelGCThreads引數來限制垃圾收集單執行緒數。