java - jvm 年輕代 如何回收 survivor 對象
問題描述
1.jvm年輕代內存回收 Eden:survivor=8:1
2.采用復制算法 Eden區滿后標記后將存活對象房子survivor0里 如下圖:
下一次Eden 滿了 會將對象放到之前清空的 survivor1的區域里
問:
1.survivor的對象如何被清理 同樣是標記-清除/整理算法嘛?
2.對象從年輕代到老年代是經過每次gc時候 還是動態的進入,當達到某一條件晉升?什么條件
問題解答
回答1:lz你好,之前看到你在我的文章淺析JVM之內存管理下評論了,同時也看到了你的問題。我的文章里面都有提到:
survivor區屬于年輕代,用的是復制收集算法
經過數次(默認是15次)在兩個Survivor區域移動后還存活的對象最后會被移動到老年代
特別大的對象直接進入老年代
回答2:推薦看看《深入理解java虛擬機》。
1.新生代的GC算法幾乎都是復制算法,也就是說,survivor也是被復制到老年代中去的。2.對象從新生代到老年代,有幾種情況
2.1有一個年齡參數MaxTenuringThreshold用來判斷,每次對象熬過一次GC,年齡加1,當到達設定的閾值時,可以進入老年代。2.2比較大的對象(需要大量連續的內存空間),同樣,虛擬機也提供了一個參數PretenureSizeThreshold,可以設置這個值,當對象大于設置值可以直接進入老年代。2.3如果Survivor空間中相同年齡的對象大小總和大于Survivor空間的一般,則年齡大于或等于該年齡的對象就可以進入老年代。這里是屬于動態判定,適應那些內存較小的情況
還有一些其他情況,可以看看書
相關文章:
1. 網頁爬蟲 - python爬蟲翻頁問題,請問各位大神我這段代碼怎樣翻頁,還有價格要登陸后才能看到,應該怎么解決2. python如何不改動文件的情況下修改文件的 修改日期3. python 正則表達式提取4. 算法 - python 給定一個正整數a和一個包含任意個正整數的 列表 b,求所有<=a 的加法組合5. javascript - 微信h5發送圖文信息,部分設備點擊“發送”按鈕時沒反應,問題較難重現,如何能找到可能存在問題的點?6. javascript - 微信小程序里怎么把頁面轉成圖片分享7. 大家好,請問在python腳本中怎么用virtualenv激活指定的環境?8. python - 求一個在def中可以實現調用本def滿足特定條件continue效果的方法(標題說不太清楚,請見題內描述)9. javascript - JS用ajax爬取百度外賣店家信息10. python - Pycharm調試代碼進行列表遍歷時,如何直接賦值指定元素
