![]() |
1
5
当我在JVM(Java热点(TM)64位服务器VM(构建16.0 B13,混合模式))上运行此代码时,所有四个函数都给出了类似的结果:
我想您的JVM在某个地方没有进行相同的优化。
您可以使用javap检查为不同函数生成的字节码:
F2()变慢的一个可能原因是编译器/JVM对
|
![]() |
2
10
实际上,您是在基准测试JVM,而不是代码。 参见:
更新
:好的,回答有点简明扼要。使用postfix运算符的循环(
参见:毕竟,这种微优化可以在2 三十一 处决。你真的经常执行吗?比起过早的优化,我更喜欢可读性。 |
![]() |
3
1
多次运行后,热点编译器可能会优化每个方法。这需要时间和变化。但是,由于所有的循环都是以同样的方式工作的,因此,时代最终会变得相似似乎是合理的。 |
![]() |
4
1
我怀疑这与在32位ALU的机器上执行64位算术有关。我怀疑,在本机指令级别上,由于细微的流水线效应,增量/减量之前/之后的某些测试组合需要更长的时间。事实上,有人报告说这些数字是平放在64位机器上的,这支持了这一理论。确认这一点的方法是获取由JIT编译器生成的本机代码的转储,获取特定CPU的文档并找出时钟周期的去向。
但老实说,我不知道这是否值得。我们有明确的证据表明,您的微基准测试数字依赖于CPU,并且所做的“工作”显然不具有代表性。(你为什么要用
我也有点惊讶于JIT编译器没有发现循环(在每种情况下)可以完全优化掉。 |
![]() |
5
1
让我们把我的答案划掉。 这肯定是由于OS或Java为Windows编译的方式,我在Windows上测试过,并在Windows上获得了像您这样的结果。 |
![]() |
Sweepy Dodo · JSON lite的格式化 5 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 7 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 7 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 10 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 10 月前 |
![]() |
Mohan · 是否有一种更快的方法来编写代码,从1:N中提取许多随机样本? 11 月前 |
![]() |
user2980746 · 在C#字典中键入xyz对的最有效方法是什么? 11 月前 |