Tag: metaspace

Java 8元空间垃圾收集

我正在运行的java进程在运行的第一个小时左右执行得很好。 但是,性能会迅速降低。 在进行性能分析时,我发现元空间垃圾收集经常发生,直到小时标记然后失控: 我很确定我能够使用-XX:MaxMetaspaceSize选项来解决这个问题。 但是,我想更多地了解为什么会出现这种情况。 我无法想象为什么垃圾收集算法的行为会像这样。 有没有人对更好的解决方案有解释或建议? 谢谢

Java8元空间和堆使用情况

我有这个代码动态生成类并加载它 import javassist.CannotCompileException; import javassist.ClassPool; public class PermGenLeak { private static final String PACKAGE_NAME = “com.jigarjoshi.permgenleak.”; public static void main(String[] args) throws CannotCompileException, InterruptedException { for (int i = 0; i < Integer.MAX_VALUE; i++) { ClassPool pool = ClassPool.getDefault(); pool.makeClass(PACKAGE_NAME + i).toClass(); Thread.sleep(3); } } } 我针对Java 7(jdk1.7.0_60)启动了这个类,正如预期的那样,它填满了PermGenSpace并且堆仍未使用 图像显示permgen使用超时,最后JVM终止 现在相同的代码针对Java 8(jdk1.8.0_40-ea)运行,并且正如预期的那样它继续扩展本机内存(Metaspace)但令人惊讶的是,1g的Metaspace它在OldGen中消耗了3g的堆(随着时间的推移几乎是Metaspace的3倍) 图像显示Metaspace使用超时和系统内存使用示例 这封来自Jon Masamitsu的电子邮件和这张JEP门票说 interned […]