首页 / JAVA / java – 高效的性能测量
java – 高效的性能测量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 高效的性能测量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1604字,纯文字阅读大概需要3分钟。
内容图文
在这个问题中,我想问一下如何测试Java代码的性能.通常的方法是这样做的:
long start = System.nanoTime();
for( int i=0; i<SOME_VERY_LARGE_NUMBER; i++) {
...do something...
}
long duration = System.nanoTime() - start;
System.out.println( "Performance: "
+ new BigDecimal( duration ).divide(
new BigDecimal( SOME_VERY_LARGE_NUMBER, 3, RoundingMode.HALF_UP ) ) );
“优化”版本将对System.nanoTime()的调用移动到循环中,增加了误差范围,因为System.nanoTime()比i和比较需要更长的时间(并且在运行时行为中更不可预测).
我的批评是:
这给了我平均运行时间,但这个值取决于我并不感兴趣的因素:就像测试循环运行时的系统负载或JIT / GC启动时的跳转.
在大多数情况下,这种方法不会(更好)吗?
>运行代码以经常测量以强制JIT编译
>在循环中运行代码并测量执行时间.记住最小值并在此值稳定时中止循环.
我的理由是我通常想知道一些代码的速度有多快(下界).外部事件(鼠标移动,显卡中断,因为你在桌面上有模拟时钟,交换,网络数据包……)任何代码都可能变得任意慢,但大多数时候,我只想知道有多快我的代码可以在完美的情况下.
它还可以使性能测量更快,因为我不需要运行代码几秒钟或几分钟(以消除不需要的效果).
有人可以确认/揭穿这个吗?
解决方法:
我认为你提议的是非常合理的,有一些调整:
1)我会报告中位数 – 或一堆百分位数 – 而不是最小值.如果你的代码给垃圾收集器带来了很大的压力,那么简单地采用最小化就很容易就无法接受(只需要在两次连续的GC暂停之间进行单次迭代).
2)在许多情况下,测量CPU时间而不是挂钟时间是有意义的.这样可以解决在同一个盒子上运行其他代码的一些影响.
3)一些基准测试工具使用两个级别的循环:内部循环重复执行操作,外部循环查看内部循环之前和之后的时钟.然后在外环的迭代中聚合观察结果.
最后,下面给出了一个非常好的JVM特定问题的概述:How do I write a correct micro-benchmark in Java?
内容总结
以上是互联网集市为您收集整理的java – 高效的性能测量全部内容,希望文章能够帮你解决java – 高效的性能测量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。