本文来自: HeapDump性能社区
概述
如今JDK8成了主流,大家都紧锣密鼓地进行着升级,享受着JDK8带来的各种便利,然而有时候升级并没有那么顺利?比如说今天要说的这个问题。我们都知道JDK8在内存模型上最大的改变是,放弃了Perm,迎来了Metaspace的时代。如果你对Metaspace还不熟,之前我写过一篇介绍Metaspace的文章,大家有兴趣的可以看看我前面的那篇文章。
我们之前一般在系统的JVM参数上都加了类似-XX:PermSize=256M -XX:MaxPermSize=256M
的参数,升级到JDK8之后,因为Perm已经没了,如果还有这些参数JVM会抛出一些警告信息,于是我们会将参数进行升级,比如直接将PermSize
改成MetaspaceSize
,MaxPermSize
改成MaxMetaspaceSize
,但是我们后面会发现一个问题,经常会看到Metaspace
的OutOfMemory
异常或者GC日志里提示Metaspace
导致的Full GC
,此时我们不得不将MaxMetaspaceSize
以及MetaspaceSize
调大到512M或者更大,幸运的话,发现问题解决了,后面没