当前位置:  开发笔记 > 编程语言 > 正文

如何计算在Java中完成函数所需的时间?

如何解决《如何计算在Java中完成函数所需的时间?》经验,为你挑选了6个好方法。

我需要测量一个函数在Java中完成所需的时间.我怎样才能做到这一点?

注意:

我想测量函数的时间消耗,而不是整个程序的消耗.



1> Ande TURNER..:
long start = System.nanoTime();    
methodToBeTimed();
long elapsedTime = System.nanoTime() - start;


请注意,nanoTime轮询的时钟可能与nanoSecond不准确.如果你很幸运,准确度将是CPU的时钟速度,否则它将是其中的一部分.

2> Christian St..:

以下是如何计算经过的时间.

// Get current time
long start = System.currentTimeMillis();

// Do something ...

// Get elapsed time in milliseconds
long elapsedTimeMillis = System.currentTimeMillis()-start;

// Get elapsed time in seconds
float elapsedTimeSec = elapsedTimeMillis/1000F;

// Get elapsed time in minutes
float elapsedTimeMin = elapsedTimeMillis/(60*1000F);

// Get elapsed time in hours
float elapsedTimeHour = elapsedTimeMillis/(60*60*1000F);

// Get elapsed time in days
float elapsedTimeDay = elapsedTimeMillis/(24*60*60*1000F);



3> Aaron Maenpa..:

使用 分析器.



4> Jonathan..:

如果您使用的是番石榴,请考虑使用Stopwatch,例如:

final Stopwatch sw = Stopwatch.createStarted();
methodToBeTimed();
final long elapsedMillis = sw.elapsed(TimeUnit.MILLISECONDS);



5> duffymo..:

如果您有多个功能,则探查器是正确的答案.

到目前为止,我看到的所有建议中的另一个问题是,它们可以在单个函数中正常工作,但是您的代码将会出现无法关闭的计时内容.

如果您知道如何进行面向方面编程,那么将时序代码保存在一个位置并以声明方式应用它是一种很好的方法.如果您使用Log4J之类的东西输出值,您可以选择将其关闭或打开.这是一个穷人的探究者.

看看AspectJ或Spring的AOP.



6> Dilum Ranatu..:

上面的所有代码片段都测量从调用方法到方法返回/抛出异常的时间过去的大致时间.这些技术不涉及线程调度,GC引起的暂停等.

是的,一些剖析器会做一个合理的工作.

如果您使用的是Java 1.6,则可以使用基于JMX的VM管理和监视支持.例如,您可能会找到值为ThreadMXBean.getCurrentThreadCpuTime()的值.在方法调用之前和之后计算此值的差异将为您提供:

"...当前线程的总CPU时间以纳秒为单位.返回值为纳秒精度但不一定是纳秒精度.如果实现区分用户模式时间和系统模式时间,则返回的CPU时间是时间量当前线程已在用户模式或系统模式下执行."

如果你的方法产生了工作线程,那么你的计算将需要更加精细;-)

一般来说,我建议围绕java.lang.mangement包.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有