日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件

發布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JVM的參數和知識點太多啦,記錄下來,供自己隨時回顧。

  • java對象什么時候進入年輕代(新生代)?
  • java對象什么時候進入老年代?
  • 對象優先在Eden分配
  • 大對象直接進入老年代
  • 空間分配擔保機制
  • java對象什么時候進入年輕代(新生代)?

    當對象首次創建時, 會放在新生代的eden區, 如果不被GC回收,會一直在eden區

    java對象什么時候進入老年代?

  • 當新生代的對象進行多次YGC之后還一直存在并且達到設置的周期(默認15),會進入老年代。參數:-XX:MaxTenuringThreshold=15
  • 一個Survivor區域中對象大小的總和加起來超過該區域50%,那么大于或者等于這個對象年齡的對象就會進入到老年代。這也就是JVM的動態對象年齡判斷。 舉個栗子:參數-XX:TargetSurvivorRatio=50 默認50%
  • 對象優先在Eden分配

    對象首先進入Eden區域,Eden區域滿時會進行一次YGC,把存活對象放入S1區,再對Eden區域進行垃圾回收。第二次Eden區域滿時進行第二次YGC,此時S1區的存活對象和Eden的存活對象被復制到S2區,Eden區的垃圾對象再次被回收

    設置參數:-XX:SurvivorRatio=8

    設置Eden區比例為80%,S1 和 S2 各為10%;若設置為5,Eden:兩個S區 為5:1:1

    大對象直接進入老年代

    為了避免對象在Eden區、S1、S2區進行大量的內存復制,當大對象進入時,直接進入老年代。 配置參數:-XX:PretenureSizeThreshold=1M 當對象大于1M時,直接進入老年代

    空間分配擔保機制

    在執行任何Minor GC(YGC)之前,虛擬機會先檢查老年代最大可用的連續空間是否大于新生代對象總空間,如果這個條件成立,那么Minor GC可用確保是安全的,如果不成立,則虛擬機會查看HandlePromotionFailure設置值是否允許擔保失敗,如果允許,會繼續檢查之前歷次Minor GC中晉升到老年代的平均對象大小是否<老年代最大可用的連續空間,如果小于,將嘗試進行一次Minor GC,這次GC是由風險的,如果大于或者HandlePromotionFailure設置為false,那么這時要進行一次Full GC,為可能晉升到老年代的對象騰出空間。

    風險指的是什么?指的是極端情況下MGC之后所有對象依舊存活,對象全部要進入老年代,如果老年代空間不夠用,就會觸發一次Full GC。如果Full GC之后老年代空間還是不夠用,會觸發OOM。

    這塊太繞了。。簡單一點

    if(需要進行一次Minor GC){if(老年代可用空間 > 新生代所有對象大小){執行一次Minor GC;}else{if(-XX:-HandlePromotionFailure=true){if(老年代連續可用空間>之前晉升到老年代所有大小的平均值){執行Minor GC;/*執行之后有3種情況:1.剩余對象大小小于S區大小,對象進入S區2.剩余對象大小大于S區,對象進入老年代3.剩余對象大小大于S區,也大于老年代,執行一次Full GC。如果執行Full GC之后還是放不下晉升對象,報錯OOM*/}else{執行Full GC;執行Minor GC;}}}}

    總結

    以上是生活随笔為你收集整理的剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。