java8 jvm 中 MetaspaceSize 引起的 full gc
从Java 8开始,永久代(Perm Generation)被移到了元空间(Metaspace),Metaspace默认没有上限,与物理内存一致。
除了堆中的老年代,元空间的resize过程也可以引起Full GC。应用启动时,元空间内存较小,随着应用负载增大,它需要多次resize,而每次resize,就是一次Full GC。这也就解释了为什么有些应用刚启动就触发了N次full gc。
对于堆内存,解决resize带来的问题,常见的做法是固定一个较大的Xms,或者直接Xms=Xmx。元空间相关的JVM参数是 -XX:MetaspaceSize=size,这个值是触发元空间Full GC的阈值。
原文:When the space committed for class metadata reaches a certain level (a high-water mark), a garbage collection is induced. After the garbage collection, the high-water mark may be raised or lowered depending on the amount of space freed from class metadata. The high-water mark would be raised so as not to induce another garbage collection too soon. The high-water mark is initially set to the value of the command-line option -XX:MetaspaceSize.
Metaspacesize 的默认值
-XX:MetaspaceSize 的默认大小取决于平台,范围从 12 MB 到大约 20 MB。
所以还是很小的
如果想尽量不让 metaspace 出发 fullgc; 那么我们可以把他设置大一点 ,大多数情况下 200m 足够了
即使他用不了,也没关系,他只是触发的阈值
共 0 条评论