前不久在JVM群里阿飛和泉子在討論metaspace的兩個參數(shù)的含義,我看了下阿飛的文章——JVM參數(shù)MetaspaceSize的誤解,問題主要是對這兩個參數(shù)的理解有點誤解。
今天下午發(fā)現(xiàn)在沒有設置MetaspaceSize的情況下,從Mxbean獲取的max值是-1,因此就連帶這個問題也一塊搞了搞,總結如下:
MaxMetaspaceSize用于設置metaspace區(qū)域的最大值,這個值可以通過mxbean中的MemoryPoolBean獲取到,如果這個參數(shù)沒有設置,那么就是通過mxbean拿到的最大值是-1,表示無窮大。
-
MetaspaceSize表示metaspace首次使用不夠而觸發(fā)FGC的閾值,只對觸發(fā)起作用,原因是:垃圾搜集器內(nèi)部是根據(jù)變量
_capacity_until_GC來判斷metaspace區(qū)域是否達到閾值的,初始化代碼如下所示: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收集器會在發(fā)生對metaspace的回收會,會計算新的_capacity_until_GC值,以后發(fā)生FGC就跟MetaspaceSize沒有關系了
屏幕快照 2018-10-16 下午6.39.08.png -
如果不設置MetaspaceSize,則默認的_capacity_until_GC為20M左右,具體代碼如下:屏幕快照 2018-10-16 下午6.46.27.png

