91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入理解JVM:元空間大小詳細解析

發布時間:2020-05-30 07:43:21 來源:網絡 閱讀:824 作者:架構師追風 欄目:編程語言

前言

JVM加載類的時候,需要記錄類的元數據,這些數據會保存在一個單獨的內存區域內,在Java 7里,這個空間被稱為永久代(Permgen),在Java 8里,使用元空間(Metaspace)代替了永久代。永久代和元空間保存的數據并不完全一樣,永久代中還保存另一些與類的元數據無關的雜項。

深入理解JVM:元空間大小詳細解析

在Java 7里將字符串常量從永久代移動到了堆區域,但是永久代并沒有完全改造完成。直到Java 8,永久代的改造才算完全搞定,在元空間中保存的數據比永久代中純粹很多,就是類的元數據,這些信息只對編譯期或JVM的運行時有用。

深入理解JVM:元空間大小詳細解析

理論學習

使用Java 8以后,關于元空間的JVM參數有兩個:-XX:MetaspaceSize=N和 -XX:MaxMetaspaceSize=N,對于64位JVM來說,元空間的默認初始大小是20.75MB,默認的元空間的最大值是無限。MaxMetaspaceSize用于設置metaspace區域的最大值,這個值可以通過mxbean中的MemoryPoolBean獲取到,如果這個參數沒有設置,那么就是通過mxbean拿到的最大值是-1,表示無窮大。

由于調整元空間的大小需要Full GC,這是非常昂貴的操作,如果應用在啟動的時候發生大量Full GC,通常都是由于永久代或元空間發生了大小調整,基于這種情況,一般建議在JVM參數中將MetaspaceSize和MaxMetaspaceSize設置成一樣的值,并設置得比初始值要大,對于8G物理內存的機器來說,一般我會將這兩個值都設置為256M(PS:讀者可以根據自己的實際情況再調整)。歡迎大家關注我的公種浩【程序員追風】,文章都會在里面更新,整理的資料也會放在里面。

深入理解JVM:元空間大小詳細解析

源碼分析

MetaspaceSize表示metaspace首次使用不夠而觸發FGC的閾值,只對觸發起作用,原因是:垃圾搜集器內部是根據變量 _capacity_until_GC來判斷metaspace區域是否達到閾值的,初始化代碼如下所示:

void?MetaspaceGC::initialize()?{
?//?Set?the?high-water?mark?to?MaxMetapaceSize?during?VM?initializaton?since
?//?we?can't?do?a?GC?during?initialization.
??_capacity_until_GC?=?MaxMetaspaceSize;
}

GC收集器會在發生對metaspace的回收會,會計算新的capacityuntil_GC值,以后發生FGC就跟MetaspaceSize沒有關系了。

深入理解JVM:元空間大小詳細解析

如果不設置MetaspaceSize,則默認的capacityuntil_GC為20M左右,具體代碼如下:

深入理解JVM:元空間大小詳細解析


最后

歡迎大家一起交流,喜歡文章記得點個贊喲,感謝支持!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天全县| 平南县| 浦北县| 闵行区| 怀宁县| 三明市| 太仆寺旗| 崇明县| 东台市| 平山县| 阿合奇县| 梧州市| 扬州市| 布尔津县| 泸定县| 商丘市| 班戈县| 枝江市| 绿春县| 崇阳县| 安西县| 广南县| 栾城县| 宝山区| 阿城市| 兰西县| 黔南| 米泉市| 马关县| 岳池县| 合川市| 罗江县| 兴业县| 义乌市| 通化市| 霍林郭勒市| 凉山| 柏乡县| 澄江县| 临清市| 原平市|