Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;“目前无法获得统计数据”;当尝试打印字符串池信息时?_Java - Fatal编程技术网

Java &引用;“目前无法获得统计数据”;当尝试打印字符串池信息时?

Java &引用;“目前无法获得统计数据”;当尝试打印字符串池信息时?,java,Java,我正在学习关于java性能管理的课程,遇到了一个问题,使我无法打印字符串池的信息。这是当我尝试向池中添加一千万对象时得到的结果: E:\IntelliJ Projects\ExploringStrings\src>java -XX:+PrintStringTableStatistics Main Elapsed time was 28311 ms. SymbolTable statistics: Number of buckets : 20011 = 160088

我正在学习关于java性能管理的课程,遇到了一个问题,使我无法打印字符串池的信息。这是当我尝试向池中添加一千万对象时得到的结果:

E:\IntelliJ Projects\ExploringStrings\src>java -XX:+PrintStringTableStatistics Main
Elapsed time was 28311 ms.
SymbolTable statistics:
Number of buckets       :     20011 =    160088 bytes, each 8
Number of entries       :     20527 =    492648 bytes, each 24
Number of literals      :     20527 =    776904 bytes, avg  37.848
Total footprint         :           =   1429640 bytes
Average bucket size     :     1.026
Variance of bucket size :     1.033
Std. dev. of bucket size:     1.017
Maximum bucket size     :         9
statistics unavailable at this moment

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        Date start = new Date();

        List<String> strings = new ArrayList<String>();

        for(Integer i = 1; i < 10000000; i++) {
            String s =  i.toString().intern(); //Adds new string object to the string pool
            strings.add(s);
        }

        Date end = new Date();
        System.out.println("Elapsed time was " + (end.getTime() - start.getTime()) + " ms.");

    }
}
这是我使用emptymain方法运行程序时得到的结果:

E:\IntelliJ Projects\ExploringStrings\src>java -XX:+PrintStringTableStatistics Main
SymbolTable statistics:
Number of buckets       :     20011 =    160088 bytes, each 8
Number of entries       :     16615 =    398760 bytes, each 24
Number of literals      :     16615 =    608976 bytes, avg  36.652
Total footprint         :           =   1167824 bytes
Average bucket size     :     0.830
Variance of bucket size :     0.837
Std. dev. of bucket size:     0.915
Maximum bucket size     :         9
StringTable statistics:
Number of buckets       :     65536 =    524288 bytes, each 8
Number of entries       :      1734 =     27744 bytes, each 16
Number of literals      :      1734 =    112456 bytes, avg  64.854
Total footprsize_t         :           =    664488 bytes
Average bucket size     :     0.026
Variance of bucket size :     0.027
Std. dev. of bucket size:     0.163
Maximum bucket size     :         2
这是尝试向池中添加1000万个字符串的代码:

E:\IntelliJ Projects\ExploringStrings\src>java -XX:+PrintStringTableStatistics Main
Elapsed time was 28311 ms.
SymbolTable statistics:
Number of buckets       :     20011 =    160088 bytes, each 8
Number of entries       :     20527 =    492648 bytes, each 24
Number of literals      :     20527 =    776904 bytes, avg  37.848
Total footprint         :           =   1429640 bytes
Average bucket size     :     1.026
Variance of bucket size :     1.033
Std. dev. of bucket size:     1.017
Maximum bucket size     :         9
statistics unavailable at this moment

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        Date start = new Date();

        List<String> strings = new ArrayList<String>();

        for(Integer i = 1; i < 10000000; i++) {
            String s =  i.toString().intern(); //Adds new string object to the string pool
            strings.add(s);
        }

        Date end = new Date();
        System.out.println("Elapsed time was " + (end.getTime() - start.getTime()) + " ms.");

    }
}
import java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
开始日期=新日期();
列表字符串=新的ArrayList();
对于(整数i=1;i<10000000;i++){
字符串s=i.toString().intern();//将新字符串对象添加到字符串池
字符串。添加(s);
}
日期结束=新日期();
System.out.println(“运行时间为”+(end.getTime()-start.getTime())+“ms.”;
}
}
所以,我的问题是:当我尝试添加1000万个对象时,为什么我不能打印字符串池的信息,但我的讲师可以?我无法理解其中的原因,因为这远远超出了我的Java编程水平。谢谢大家。

tl;博士 退出前请等待几秒钟,以避免“此时统计数据不可用”问题

Thread.sleep(持续时间为秒(5).toMillis())
细节 如果您指的是控制台上的该消息:

目前尚无统计数字

…我也经历过类似的代码

package work.basil.example;
导入java.time.Duration;
导入java.time.Instant;
导入java.util.ArrayList;
导入java.util.List;
公共级纵梁
{
公共静态void main(字符串[]args)
{
即时开始=即时。现在();
System.out.println(“开始运行时间:“+start+”.Runtime.version():“+Runtime.version()”);
Liststrings=newarraylist();
对于(int i=1;i<10_000;i++)
{
String s=String.valueOf(i).intern();//将新字符串对象添加到字符串池中。
字符串。添加(s);
}
System.out.println(“经过的时间是”+Duration.between(start,Instant.now());
}
}
当在英特尔macOS Mojave上运行时,采用OpenJDK提供的Java 15,在IntelliJ 2020.3.1中执行

/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home/bin/Java-XX:+PrintStringTableStatistics--enable preview-javaagent:/Users/basilbourque/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.6682.168/IntelliJ IDEA 2020.3 EAP.app/Contents/lib/IDEA\rt.jar=52178:/Users/basilbourque/Library/ApplicationSupport/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.6682.168/IntelliJ IDEA 2020.3 EAP.app/Contents/bin-Dfile.encoding=UTF-8-classpath/Users/basilbourque/IdeaProjects/ExampleJava/target/classes:/Users/basilbourque/.m2/repository/com/h2数据库/h2/1.4.200/h2-1.4.200.jar:/Users/basilbourque/.m2/repository/com/thedeanda/lorem/2.1.jar:/Users/basilbourque/.m2/repository/org/postgresql/postgresql/postgresql-42.2.18.18.jar:/Users/basilbourque/.m2/org/checkeramework/checker-qual/3.5.0/checker-qual-3.5.0.jar:/Users/basilbourque/.m2/repository/org/apache/commons/commons-csv/1.8/commons-csv-1.8.jar-work.basil.example.Stringer
开始运行时间:2021-01-04T02:03:34.484633Z。Runtime.version():15.0.1+9
运行时间为PT6.219106S
可符号化统计:
存储桶数:32768=262144字节,每8个
条目数:2633=42128字节,每16个
文字数:2633=98200字节,平均37.000
总占用空间:=402472字节
平均铲斗尺寸:0.080
铲斗尺寸差异:0.079
铲斗尺寸标准偏差:0.280
最大铲斗尺寸:2
目前尚无统计数字
进程已完成,退出代码为0
…在这里,我得到了目前无法获得的相同统计信息

因此,我胡乱猜测,添加了一个
线程.sleep
调用,等待5秒钟后退出

尝试{Thread.sleep(Duration.ofSeconds(5.toMillis());}catch(interruptedeexception e){e.printStackTrace();}
因此,在运行此程序时:

package work.basil.example;
导入java.time.Duration;
导入java.time.Instant;
导入java.util.ArrayList;
导入java.util.List;
公共级纵梁
{
公共静态void main(字符串[]args)
{
即时开始=即时。现在();
System.out.println(“开始运行时间:“+start+”.Runtime.version():“+Runtime.version()”);
Liststrings=newarraylist();
对于(int i=1;i<10_000;i++)
{
String s=String.valueOf(i).intern();//将新字符串对象添加到字符串池中。
字符串。添加(s);
}
System.out.println(“经过的时间是”+Duration.between(start,Instant.now());
尝试{Thread.sleep(Duration.ofSeconds(5.toMillis());}catch(InterruptedException e){e.printStackTrace();}
}
}
我明白了:

/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home/bin/Java-XX:+PrintStringTableStatistics-启用预览-javaagent:/Users/basilbourque/Library/Application-Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.6682.168/IntelliJ IDEA 2020.3 EAP.app/Contents/lib/IDEA\rt.jar=52114:/Users/basilbourque/Library/Application/ApplicationSupport/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.6682.168/IntelliJ IDEA 2020.3 EAP.app/Contents/bin-Dfile.encoding=UTF-8-classpath/Users/basilbourque/IdeaProjects/ExampleJava/target/classes:/Users/basilbourque/.m2/repository/com/com/com/h2-database/h2/1.4.200.jar:/Users/basilbourque/m2/repository/com/thedeanda/lorem/2.1.jar:/Us