直通BAT JVM必考题:Minor GC、Major GC、Full GC的区别
Java面試過程,JVM屬于必考題系列:
直通BAT必考題系列:深入詳解JVM內存模型與JVM參數詳細配置
直通BAT必考題系列:JVM的4種垃圾回收算法、垃圾回收機制與總結
直通BAT必考題系列:7種JVM垃圾收集器特點,優劣勢、及使用場景
直通BAT必考題系列:JVM性能調優的6大步驟,及關鍵調優參數詳解
直通BAT必考題系列:深入剖析JVM之G1收集器、及回收流程、與推薦用例
今天主要談談JVM GC的類型和策略,特別是大家經常混淆的Minor GC、Major GC、Full GC,年輕代GC、老年代GC,之間有什么區別和聯系。
Minor GC
JVM堆內存被分為兩部分:年輕代(Young Generation)和老年代(Old Generation)。
1.年輕代
年輕代是所有新對象產生的地方。當年輕代內存空間被用完時,就會觸發垃圾回收。這個垃圾回收叫做Minor GC。年輕代被分為3個部分——Enden區和兩個Survivor區。
年輕代空間的要點:
大多數新建的對象都位于Eden區。
當Eden區被對象填滿時,就會執行Minor GC。并把所有存活下來的對象轉移到其中一個survivor區。
Minor GC同樣會檢查存活下來的對象,并把它們轉移到另一個survivor區。這樣在一段時間內,總會有一個空的survivor區。
經過多次GC周期后,仍然存活下來的對象會被轉移到年老代內存空間。通常這是在年輕代有資格提升到年老代前通過設定年齡閾值來完成的。
2.年老代
年老代內存里包含了長期存活的對象和經過多次Minor GC后依然存活下來的對象。通常會在老年代內存被占滿時進行垃圾回收。
Major GC
老年代的垃圾收集叫做Major GC,Major GC通常是跟full GC是等價的,收集整個GC堆。
Minor GC和Major GC其實就是年輕代GC和年老年GC的俗稱。而在Hotspot VM具體實現的收集器:Serial GC, Parallel GC, CMS, G1 GC中,大致可以對應到某個Young GC和Old GC算法組合。
分代GC
針對HotSpot VM的實現,其實GC的準確分類可以分為:
分代GC
Full GC
以及后續的G1的分區收集本質其實還是一個分代收集器,但是和之前的各類回收器不同,它同時兼顧年輕代和老年代。
分代GC并不收集整個GC堆的模式,而是只專注分代收集
Young GC:只收集年輕代的GC
Old GC:只收集年老代的GC(只有CMS的concurrent collection是這個模式)
Mixed GC:收集整個young gen以及部分old gen的GC(只有G1有這個模式)
Full GC
Full GC定義是相對明確的,就是針對整個新生代、老生代、元空間(metaspace,java8以上版本取代perm gen)的全局范圍的GC。
你可能也喜歡:
總結
以上是生活随笔為你收集整理的直通BAT JVM必考题:Minor GC、Major GC、Full GC的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud构建微服务架构:
- 下一篇: 美团DSP广告策略实践