如何计算在Java中执行一个方法所花费的时间?
当前回答
您可能需要考虑面向方面的编程。你不希望你的代码中充斥着时间。您希望能够以声明的方式关闭和打开它们。
如果你使用Spring,看看他们的MethodInterceptor类。
其他回答
nanoTime()在短时间尺度上非常精确。 当需要这种精度时,您需要注意您真正测量的是什么。 尤其是不去测量纳米时间调用本身
long start1 = System.nanoTime();
// maybe add here a call to a return to remove call up time, too.
// Avoid optimization
long start2 = System.nanoTime();
myCall();
long stop = System.nanoTime();
long diff = stop - 2*start2 + start1;
System.out.println(diff + " ns");
顺便说一下,您将为同一个调用测量不同的值,因为
计算机上的其他负载(后台、网络、鼠标移动、中断、任务切换、线程) 贮藏馅(冷热) Jit编译(没有优化,由于运行编译器而影响性能,由于编译器而提高性能(但有时使用Jit的代码比不使用Jit的代码慢!))
您可能需要考虑面向方面的编程。你不希望你的代码中充斥着时间。您希望能够以声明的方式关闭和打开它们。
如果你使用Spring,看看他们的MethodInterceptor类。
事实上,Nanotime甚至不适用于流逝时间,因为它比currentTimeMillis漂移得更厉害。此外,纳米时间往往以牺牲准确性为代价来提供过高的精度。因此,它是高度不一致的,需要改进。
对于任何时间测量过程,currentTimeMillis(尽管几乎同样糟糕)在平衡精度和精度方面做得更好。
检查这个:System.currentTimeMillis。
你可以这样计算你的方法的时间:
long start = System.currentTimeMillis();
class.method();
long time = System.currentTimeMillis() - start;
如果你为Android开发应用程序,你应该尝试TimingLogger类。 看看这些描述TimingLogger助手类用法的文章:
在Android SDK中测量性能(27.09.2010) 发现Android API -第一部分(03.01.2017)
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap