第18課:JVM垃圾回收器序列、並行、併發垃圾回收器概述
內容:
1.JVM中不同的垃圾回收器 2.穿行、並行、併發垃圾回收器概述
一、JVM中不同的垃圾回收器
1.按照分代收集的方式,把垃圾回收器做如下的劃分: a)新生代收集器:Serial 、ParNew、Parallel Scavenge b)老年代收集器:CMS、Serial Old、Paralled Old c)新生代和老年代都可以使用的:G1 詳細內容:JVM垃圾回收器介紹 2.Stop the world:所謂的Stop the World機制,簡稱STW,即在執行垃圾收集演算法時,Java應用程式的其他所有除了垃圾收集收集器執行緒之外的執行緒都被掛起。此時,系統只能允許GC執行緒進行執行,其他執行緒則會全部暫停,等待GC執行緒執行完畢後才能再次執行。這些工作都是由虛擬機器在後臺自動發起和自動完成的,是在使用者不可見的情況下把使用者正常工作的執行緒全部停下來,這對於很多的應用程式,尤其是那些對於實時性要求很高的程式來說是難以接受的。但是有些時候對於虛擬機器來說採用Stop the world機制是無法避免的,例如採用複製演算法時,為了保證在複製存活的物件的時候,物件的一致性,不然要使應用程式被掛起。但是隨著Java虛擬機器的發展,HotSpot虛擬機器團隊為達到更好使用者體驗而一直進行著努力,不斷的對垃圾收集器進行著改進,隨著JDK的版本的不斷更新,更好的垃圾收集器的出現,使用者執行緒的停頓時間也在不斷縮短,雖然這一時間現階段仍然不能消除,但相信不久的未來一定會有更好的垃圾收集器被發現,從而完全達到使用者對於虛擬機器垃圾回收的效能要求。 3.對於很多的垃圾收集器來說,都會採用Stop the World機制來進行垃圾回收。具體來講,在Java虛擬機器的Serial, ParNew, Parallel Scanvange, ParallelOld, Serial Old全程都會Stop the world,JVM這時候只執行GC執行緒,不執行使用者執行緒。而CMS主要分為 initial Mark, Concurrent Mark, ReMark,Concurrent Sweep等階段,initial Mark和Remark佔整體的時間比較較小,它們會Stop the world。 Concurrent Mark和Concurrent Sweep會和使用者執行緒一起執行。雖然CMS減少了stop the world的次數,不可避免地讓整體GC的時間拉長了。
二、序列,並行,併發垃圾回收器概述
1.序列:jvm GC時存在一個執行緒 2.並行:jvm gc時有多個執行緒,用多個cpu或者core同時執行垃圾回收,優點是提高了吞吐量。但是由於執行緒切換佔用了時間,所有並行並不一定比序列好。兩者都基於stop the world。 3.併發:不用停止任務,可以在gc時,任務同時執行。由此提高了效率,增加了使用者體驗。