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中的不一样吗
1456 阅读