java - System.out.println()耗时; Java语句?

标签 java debugging monitoring

我听说 System.out.println(); Java 语句是昂贵的(它消耗了很多时间)
所以我试着评估一下它的成本:
当我评估 5 个语句时...成本 = 1.0
所以我预计 1 条语句的成本 = 0.2
但实际上我发现 The cost = 0.0 !!

double t1 = 0;
double t2 = 0;

t1 = System.currentTimeMillis();
System.out.println("aa");
System.out.println("aa");
System.out.println("aa");
System.out.println("aa");
System.out.println("aa");
t2 = System.currentTimeMillis();
System.out.println("The cost = " + (t2-t1) ); 
// The cost = 1.0 


t1 = System.currentTimeMillis();
System.out.println("aa");
t2 = System.currentTimeMillis();
System.out.println("The cost = " + (t2-t1) ); 
// The cost = 0.0 
// Expected : 1.0/5 = 0.2 -- But Actual : 0.0

为什么?

最佳答案

System#currentTimeMillis返回 long 而不是 double。因此,您丢失了 .2

测试 5 个语句不是一个好主意,特别是当您几乎感觉不到执行它所花费的时间时。我建议您测试 5 个以上的语句,然后将数量减少到 1 个以上。

想要精确测量时间,最好使用System#nanoTime ,因为它以纳秒给出时间:

long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;

查找“nanoTime vs currentTimeMillis”,您将获得数百篇文章。

关于java - System.out.println()耗时; Java语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20683361/

相关文章:

monitoring - 将时间序列与 Graphite 关联起来

Java:如何跟踪/监视 CMS 垃圾收集器的 GC 时间?

c# - VSCode dbg附加本地进程来调试C# dll使用的C dll

angularjs - 在 Protractor 中调试

c# - 什么是快速测试多个盒子 ping 的最佳方法

java - Grails Hibernate session 问题 - 未能延迟初始化集合

java.lang.UnsatisfiedLinkError : no "somefile" in java. 库.path

java - Xpath 编译正则表达式不显示 xml 注释

java - 正则表达式中的字边界

Linux:如何设置 gdb 和可执行文件之间的关联?