YoT*_*LCD 3 java performance low-level
假设我有一些代码,我想最大限度地优化它,无视可读性,可维护性等.
为此目的,无论如何要确定每个基本动作花费多少时间?我想这可能与CPU有关,但我不确定.
我的意思是像骑自行车for,分配a=24,数学运算2+25等等.
环境很重要.各种Java语言结构没有固定的成本,您可以将它们加起来以获得有用的运行时估计的近似值. 你似乎希望得到的答案不存在.
例如,即使您确实设法正确设计了一个微基准测量来测量某些if()s与某个switch,但结果将严重依赖于周围的代码,案例的详细信息以及分支的可预测性.制作微基准测试很难.除非您查看实际在循环中运行的机器指令,否则通常最终会测量除您想要的内容之外的其他内容.如果你不使用结果,一个好的编译器也很容易优化你的循环,但是很难以一种不会产生比你想要测量的更多开销的方式使用结果.
一个好的JIT编译器JVM应该生成的机器代码并不比你希望的差太多,所以如果你很好地了解C如何编译到ASM,那对java来说可能是有用的.
如果您想了解现代x86微体系结构的快速与慢速,请查看Agner Fog的指南.
一个好的性能分析工具可以帮助您确定您的代码是否受CPU限制或内存瓶颈(缓存未命中:内存带宽或延迟)或分支错误预测.我没有为Java做过这个,但perf只要你使用足够长的运行来隐藏JVM启动的开销,标准工具(比如Linux )就可以工作了.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |