MetaspaceSize和MaxMetaspaceSize的理解

前不久在JVM羣裏阿飛和泉子在討論metaspace的兩個參數的含義,我看了下阿飛的文章——JVM參數MetaspaceSize的誤解,問題主要是對這兩個參數的理解有點誤解。

今天下午發現在沒有設置MetaspaceSize的情況下,從Mxbean獲取的max值是-1,因此就連帶這個問題也一塊搞了搞,總結如下:

  • MaxMetaspaceSize用於設置metaspace區域的最大值,這個值可以通過mxbean中的MemoryPoolBean獲取到,如果這個參數沒有設置,那麼就是通過mxbean拿到的最大值是-1,表示無窮大。
  • 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的回收會,會計算新的_capacity_until_GC值,以後發生FGC就跟MetaspaceSize沒有關係了

屏幕快照 2018-10-16 下午6.39.08.png

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

屏幕快照 2018-10-16 下午6.46.27.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章