性能问答>使用G1回收器,是否常量池回收特别慢?>
1回复
3年前

使用G1回收器,是否常量池回收特别慢?



Mac book pro 2021
jdk1.8
使用jvm参数
1.实验组

-Xmx2048m
-XX:MaxMetaspaceSize=1024m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=10
-XX:+PrintStringTableStatistics
-XX:StringTableSize=25000000
-XX:+PrintGC

运行代码

    public static void main(String[] args) throws Exception {
        long start = System.currentTimeMillis();
        for (int i=0; i<25000000; i++){
            UUID.randomUUID().toString().intern();
            if (i>=100000 && i%100000==0){
                System.out.println("i="+i);
            }
        }
        System.out.println(System.currentTimeMillis() - start);
    }

最终耗时:60141

2.对照组
硬件 软件 jvm参数 全部一致
代码稍作改动只修改 不去做String.intern()

    public static void main(String[] args) throws Exception {
        long start = System.currentTimeMillis();
        for (int i=0; i<25000000; i++){
      //      UUID.randomUUID().toString().intern();
            if (i>=100000 && i%100000==0){
                System.out.println("i="+i);
            }
        }
        System.out.println(System.currentTimeMillis() - start);
    }

最终耗时:46

请问为什么只是不把数据存放到常量池中可以快速这么多?是因为g1中常量池的垃圾回收和heap中的不一样吗

1495 阅读
请先登录,查看1条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步