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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

你这样的“垃圾“,就应该进入老年代!!!

發布時間:2025/3/16 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你这样的“垃圾“,就应该进入老年代!!! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么樣的垃圾會進入到老年代?對象進入老年代的條件有三個,滿足一個就會進入到老年代,

  • 1、躲過15次GC。每次垃圾回收后,存活的對象的年齡就會加1,累計加到15次(jdk8默認的),也就是某個對象躲過了15次垃圾回收,那么JVM就認為這個是經常被使用的對象,就沒必要再帶著年輕代中了。具體的次數可以通過 -XX:MaxTenuringThreshold 來設置在躲過多少次垃圾收集后進去老年代。
  • 2、動態對象年齡判斷。規則:在某個 Survivor 中,如果有一批對象的大小總是大于該 Survivor 的 50%,那么此時大于等于該批對象年齡的對象機會會直接到老年代中。
  • 3、大對象直接進入老年代。-XX:PretenureSizeThreshold 來設置大對象的臨界值,大于該值的就被認為是大對象,就會直接進入老年代。

針對上面的三點來逐一分析:

躲過15次 GC

這個沒啥好說的,最好理解,就是在執行了15次GC后,對象依舊存活,那么就將其移動到老年代中去,沒執行一次垃圾回收,存活的對象的年齡就+1,具體的執行次數可以通過:-XX:PretenureSizeThreshold參數來設置。

動態對象年齡判斷

這就有點難理解了,不過在我 xx 面前,就一定會給你講清楚。

再來看下這個規則:在某個 Survivor 中,如果有一批對象的大小總是大于該 Survivor 的 50%,那么此時大于等于該批對象年齡的對象機會會直接到老年代中。

o(╥﹏╥)o 還是沒理解。。。我們畫圖來理解試試

假設現在 To 里面的如圖兩個對象大小總和50 M,且都是3歲了,因為 To 是100 M,所以這個時候我們就說在某個 Survivor 中,如果有一批對象的大小總是大于該Survivor 的 50%。這個時候大于等于該批對象年齡的對象機會會直接到老年代中

再還換句話說就是:當前放對象的Survivor區域里(其中一塊區域,放對象的那塊s區),一批對象的總大小大于這塊Survivor區域內存大小的50%(-XX:TargetSurvivor 修可以指定),那么此時大于等于這批對象年齡最大值的對象,就可以直接進入老年代了。

例如Survivor區域里現在有一比對象,年齡1+年齡2+年齡n的多個年齡對象總和超過了的多個年齡對象總和超過了區域的50%,此時就會巴年齡n(含)以上的對象都放入老年代)。這個規則其實是希望那些可能是長期存活的對象,盡早進入老年代。對象動態年齡判斷機制一般是在 Minor GC 之后觸發的。

大對象直接進入老年代

這個就簡單了,-XX:PretenureSizeThreshold 來設置大對象的臨界值。如 -XX:PretenureSizeThreshold=1024 * 1024。即對象超過1M直接進入老年代。其實大對象直接進入到老年代還包含這種情況:那就是當 Eden 中執行了 Minor GC 后,存活的對象的大小是 超過了100M了(上圖 from 和 to 都是100M)此時這些存活的對象也是直接進入到老年代。

說了半天對象都跑到老年代去了,那既然老年代這個牛逼,干嘛還分年輕代和老年代?年輕人,你不要急。后文我會全部道來。我們下面先來看看老年代空間如果不夠用怎么辦?

總結

以上是生活随笔為你收集整理的你这样的“垃圾“,就应该进入老年代!!!的全部內容,希望文章能夠幫你解決所遇到的問題。

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