文章目錄
- 1. 記憶體配置設定與回收政策
- 2. 對象優先在Eden配置設定
- 3. 大對象直接進入老年代
- 4. 長期存活的對象将進入老年代
- 5. 動态對象年齡的判定
- 6. 空間配置設定擔保
1. 記憶體配置設定與回收政策
- MinorGC:指發生在新生代的垃圾收集,MinorGC發生的十分頻繁,回收速率比較快。
- FullGC:指發生在老年代的垃圾收集,可能會伴随着至少一次的MinorGC。回收速率較慢。
2. 對象優先在Eden配置設定
- 大多數情況下,對象在新生代Eden區域配置設定 ,當Eden區沒有足夠空間時,将發生一次MinorGC。
3. 大對象直接進入老年代
- 大對象指需要需要連續的記憶體空間的Java對象,典型的大對象有很長的字元串和很大的數組。
- 經常出現的大對象容易導緻記憶體還有不少空間時就要提前觸發垃圾收集來存放大對象
- 因為新生代采用的是标記-複制算法,是以這樣做的目的是防止在Eden區和Survivor區的大量記憶體複制
4. 長期存活的對象将進入老年代
- 虛拟機為每個對象定義了一個對象年齡計數器,如果對象從Eden區出生并成功的經過一次MinorGC,并被Survivor容納的話,對象年齡計數器就加1,當對象的年齡增加到一定程度,就進入老年代。
5. 動态對象年齡的判定
- 如果Survivor區相同年齡的所有對象大小超過Survivor記憶體區域的一半時,所有大于等于該年齡的對象直接進入老年代。
6. 空間配置設定擔保
- 在進行MinorGC之前,虛拟機會檢查老年代最大可用的連續記憶體空間是否大于新生代所有對象的總空間,如果成立那麼此次MinorGC是安全的。否則,虛拟機會檢查是否允許擔保失敗,如果允許,那麼會繼續檢查老年代最大可用的連續空間是否大于曆次晉升到老年代對象的平均大小。如果大于,将進行一次MinorGC。如果小于或者不允許冒險,将要改為一次FullGC。
- 新生代使用的是标記-複制算法,但為了記憶體的使用率,隻使用一個Survivor空間作為輪換備份,是以當出現大量對象在MinorGC後仍然存活的情況下,就需要老年代進行記憶體擔保,把Survivor無法容納的對象直接進入老年代。