【Java JVM】Java虛擬機器記憶體配置幾個原則__Java

來源:互聯網
上載者:User

1、大多數情況下,對象在新生代Eden區中分配。當Eden區沒有足夠空間進行分配時,虛擬機器將發起一次Minor GC

2、大對象直接進入老年代。大對象指需要大量連續記憶體空間的Java對象,最典型的大對象就是那種很長的字串以及數組。

3、長期存活的對象將進入老年代。
虛擬機器採用分代收集的思想來管理記憶體,那麼記憶體回收時就必須能識別哪些對象應放在新生代,哪些對象應放在老年代中。為了做到這一點,虛擬機器給那個對象定義了一個對象年齡計數器。如果對象在Eden出生並經過第一次Minor GC後仍然存活,並且能背Survivor容納的話,將被移動到Survivor空間中,並且對象年齡設為1。對象在Survivor區中每熬過一次Minor GC,年齡就增加1歲,當他的年齡增加到一定程度(預設為15歲),就將會被晉陞到老年代中。對象晉陞老年代的年齡閾值,可以通過參數 -XX:MaxTenuringThreshold設定。

4、動態對象年齡判定。為了能更好地適應不同程式的記憶體狀況,虛擬機器並不是永遠的要求對象的年齡必須達到了MaxTenuringThreshold才能晉陞到老年代,如果在Survivor空間中相同年齡所有對象大小總和大雨Survivor空間的一半,年齡大於或等於該年齡的對象就可以直接進入老年代。

5、空間分配擔保。
在發生Minor GC之前,虛擬機器會先檢查老年代最大可用的連續空間是否大於新生代所有對象總空間,如果這個條件成立,那麼Minor GC可以確保是安全的。如果不成立,則虛擬機器會查看HandlePromotionFailure設定值是否允許擔保失敗。如果允許,那麼會繼續檢查老年代最大可用的連續空間是否大於曆次晉陞到老年代對象的平均大小,如果大於,將嘗試著進行一次Minor GC,儘管這次Minor GC是有風險的;如果小於或者HandlePromotionFailuer設定不允許冒險,那這時也要改為進行一次Full GC。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.