咱們常常會聽到許多垃圾回收的術語,例如:Minor GC、Major GC、Young GC、Old GC、Full GC、Stop-The-World 等。但這些 GC 術語到底指的是什麼,它們之間的區別究竟是什麼?今天咱們就來詳細說說。html
從年輕代空間回收內存被稱爲 Minor GC,有時候也稱之爲 Young GC。對於 Minor GC,你須要知道的一些點:java
從老年代空間回收內存被稱爲 Major GC,有時候也稱之爲 Old GC。jvm
許多 Major GC 是由 Minor GC 觸發的,因此不少狀況下將這兩種 GC 分離是不太可能的。性能
Minor GC 做用於年輕代,Major GC 做用於老年代。 分配對象內存時發現內存不夠,觸發 Minor GC。Minor GC 會將對象移到老年代中,若是此時老年代空間不夠,那麼觸發 Major GC。所以纔會說,許多 Major GC 是由 Minor GC 引發的。學習
Full GC 是清理整個堆空間 —— 包括年輕代、老年代和永久代(若是有的話)。所以 Full GC 能夠說是 Minor GC 和 Major GC 的結合。spa
當準備要觸發一次 Minor GC 時,若是發現年輕代的剩餘空間比以往晉升的空間小,則不會觸發 Minor GC 而是轉爲觸發 Full GC。由於JVM此時認爲:以前這麼大空間的時候已經發生對象晉升了,那如今剩餘空間更小了,那麼很大機率上也會發生對象晉升。既然如此,那麼我就直接幫你把事情給作了吧,直接來一次 Full GC,整理一下老年代和年輕代的空間。線程
另外,即在永久代分配空間但已經沒有足夠空間時,也會觸發 Full GC。翻譯
Stop-The-World,中文通常翻譯爲全世界暫停,是指在進行垃圾回收時由於標記或清理的須要,必須讓全部執行任務的線程中止執行任務,從而讓垃圾回收線程回收垃圾的時間間隔。日誌
在 Stop-The-World 這段時間裏,全部非垃圾回收線程都沒法工做,都暫停下來。只有等到垃圾回收線程工做完成才能夠繼續工做。能夠看出,Stop-The-World 時間的長短將關係到應用程序的響應時間,所以在 GC 過程當中,Stop-The-World 的時間是一個很是重要的指標。code
若是隻是看,其實沒法真正學會知識的。爲了幫助你們更好地學習,我建了一個虛擬機羣,專門討論學習 Java 虛擬機方面的內容,每週針對我所發文章進行討論答疑。若是你有興趣,關注「Java技術精選」公衆號,經過右下角菜單「入羣交流」加我好友,小助手會拉你入羣。