新生代進入老年代的方式
-
大對象直接進入年老代算法
- 大對象即須要大量連續內存空間的Java對象,如長字符串及數組。常常出現大對象致使內存還有很多空間時就提早觸發垃圾收集以獲取足夠的連續空間來安置他們。
- 虛擬機提供了一個-XX:PretenureSizeThreshold參數,令大於這個設置值的對象直接在老年代分配。 這樣作的目的是避免在Eden區及兩個Survivor區之間發生大量的內存複製(新生代採用複製算法收集內存)。
-
長期存活的對象將進入年老代數組
- 虛擬機給每一個對象定義了一個對象年齡計數器,在對象在Eden建立並通過第一次Minor GC後仍然存活,並能被Suivivor容納的話,將會被移動到Survivor空間,並對象年齡設置爲1。每經歷過Minor GC,年齡就增長1歲,當到必定程度(默認15歲,能夠經過參數-XXMaxTenuringThreshold設置),就將會晉升年老代。
-
動態對象年齡斷定ui
- 爲了更好地適應不一樣程序內存情況,虛擬機並不硬性要求對象年齡達到MaxTenuringThreshold才能晉升老年代,若是在Survivor空間中相同年齡全部對象大小的總和大於Survivor空間的一半,年齡大於或等於該年齡的對象就能夠直接進入年老代
歡迎關注本站公眾號,獲取更多信息