您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Java對象中新生代進入老年代的方式有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
大對象直接進入年老代
大對象即需要大量連續內存空間的Java對象,如長字符串及數組。經常出現大對象導致內存還有不少空間時就提前觸發垃圾收集以獲取足夠的連續空間來安置他們。
虛擬機提供了一個-XX:PretenureSizeThreshold參數,令大于這個設置值的對象直接在老年代分配。 這樣做的目的是避免在Eden區及兩個Survivor區之間發生大量的內存復制(新生代采用復制算法收集內存)。
長期存活的對象將進入年老代
虛擬機給每個對象定義了一個對象年齡計數器,在對象在Eden創建并經過第一次Minor GC后仍然存活,并能被Suivivor容納的話,將會被移動到Survivor空間,并對象年齡設置為1。每經歷過Minor GC,年齡就增加1歲,當到一定程度(默認15歲,可以通過參數-XXMaxTenuringThreshold設置),就將會晉升年老代。
動態對象年齡判定
為了更好地適應不同程序內存狀況,虛擬機并不硬性要求對象年齡達到MaxTenuringThreshold才能晉升老年代,如果在Survivor空間中相同年齡所有對象大小的總和大于Survivor空間的一半,年齡大于或等于該年齡的對象就可以直接進入年老代
看完上述內容,你們對Java對象中新生代進入老年代的方式有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。