• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

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
0
下一篇:java8 jvm 中建议设置的启动参数 JAVA_OPTS

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。