微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-8 – Java8 MetaspaceSize标志不起作用

我有一个简单的测试代码,它将-XX:MetaspaceSize和-XX:MaxMetaspaceSize设置为相同的值.我认为Metaspace不应该动态调整大小.但是从我的测试(检查VisualVM GC的Metaspace图并通过jstat打印日志),我看到元空间从低值增长到我设置的最大值.那么-XX:MetaspaceSize不能正常工作吗?

我的测试代码

try {

    while(true){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(A.class);
        enhancer.setUseCache(false);
        enhancer.setCallback((MethodInterceptor) (obj,method,args1,methodProxy) -> methodProxy.invokeSuper(obj,args1));
        enhancer.create();

        Thread.sleep(50);
    }
} catch (Throwable throwable) {
    throwable.printstacktrace();
}

VM args:

-XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m

Java版本:

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02,mixed mode)

jstat结果:(MC值继续增长到10m左右)

C:\Users\dyu>jstat -gc 12336 1000 20
S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
8192.0 8192.0  0.0   2207.8 49152.0  43399.2   131072.0     16.0    7168.0 6777.9 768.0  677.7       1    0.015   0      0.000    0.015
8192.0 8192.0  0.0   2207.8 49152.0  48166.1   131072.0     16.0    7168.0 6777.9 768.0  677.7       1    0.015   0      0.000    0.015
8192.0 8192.0 2592.0  0.0   49152.0   3691.9   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0   7537.9   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  11378.9   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  16180.3   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  20021.3   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  24822.5   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  28663.5   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  33466.8   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  37312.8   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  42114.1   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0 2592.0  0.0   49152.0  45955.1   131072.0     24.0    8832.0 8403.6 896.0  795.9       2    0.020   0      0.000    0.020
8192.0 8192.0  0.0   3488.0 49152.0   1925.1   131072.0     32.0    10752.0 10225.1 1024.0 934.2       3    0.026   0      0.000    0.026
8192.0 8192.0  0.0   3488.0 49152.0   6737.6   131072.0     32.0    10752.0 10225.1 1024.0 934.2       3    0.026   0      0.000    0.026
8192.0 8192.0  0.0   3488.0 49152.0  11758.5   131072.0     32.0    10752.0 10225.1 1024.0 934.2       3    0.026   0      0.000    0.026
8192.0 8192.0  0.0   3488.0 49152.0  15608.7   131072.0     32.0    10752.0 10225.1 1024.0 934.2       3    0.026   0      0.000    0.026
8192.0 8192.0  0.0   3488.0 49152.0  29056.4   131072.0     32.0    10752.0 10225.1 1024.0 934.2       3    0.026   0      0.000    0.026
8192.0 8192.0  0.0   3488.0 49152.0  34196.6   131072.0     32.0    10752.0 10225.1 1024.0 934.2       3    0.026   0      0.000    0.026
8192.0 8192.0  0.0   3488.0 49152.0  39339.7   131072.0     32.0    10752.0 10225.1 1024.0 934.2       3    0.026   0      0.000    0.026

解决方法

你误解了 -XX:MetaspaceSize的作用:

-XX:MetaspaceSize=size

Sets the size of the allocated class Metadata space that will trigger a garbage collection the first time it is exceeded. This threshold for a garbage collection is increased or decreased depending on the amount of Metadata used.

该选项的名称可能被视为具有误导性,除非您将其解释为“预期大小”,因此显然它应在超出时触发垃圾收集(而最大大小定义硬限制).

an open bug report,JDK-8067205要求设置初始元空间大小的选项.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐