【发布时间】:2016-09-04 07:53:06
【问题描述】:
我最近将 java 版本从 1.6 升级到 1.8。迁移到 java 1.8 后,元空间内存消耗随着时间的推移而增加(通过 JConsole 观察到这一点)。此外,每次访问网页时,元空间大小都会增加。所以,
有什么办法可以强制清理元空间?
有什么方法可以检查元空间中的所有内容并增加元空间的大小?
哪种 GC(SerialGC、G1、ConcMarkSweep)能有效清理元空间以及我应该为 GC 使用哪些 JVM VM 配置?
Java 1.8 正确元空间操作所需的最小 RAM 是多少?在我的例子中,它限制在 256M RAM,在一个微型 Linux 机器上具有相同的交换大小。
如果我们使用 XX:MaxMetaSpaceSize 限制元空间大小,JVM 会引发 outofmemory:metaspace 条件。
【问题讨论】:
-
你的意思是像神奇的“-uselessmemory”标志?当您设置限制时,您已经在达到限制时强制执行清理。当您依次收到
OutOfMemoryError时,这意味着没有什么需要清理的了。 -
但是为什么没有什么需要清理的,尤其是在元空间中?如果 GC 是通过 JVM 甚至通过 Jconsole 工具执行的,堆空间有相当大的下降,但元空间几乎没有受到影响。背后的原因是什么?类加载器泄漏?如何从代码中检测到这种泄漏?
-
是的,很可能是泄漏。这已经包含在其他 SO 问题中
标签: java garbage-collection java-8 metaspace