为什么像jdk7中的BigInteger这样的其他类不使用"避免使用getfield操作码"技术就像String.trim一样

时间:2016-05-21 11:06:16

标签: jvm opcode

为什么BigInteger不使用局部变量来避免使用getfield操作码?

BigInteger中的mag和String中的值都是最终的。

BigInteger的源代码和操作码

enter image description here

String.trim的来源

enter image description here

1 个答案:

答案 0 :(得分:2)

不应该问为什么它不这样做,你应该问为什么一个人会这样做?,考虑到需要额外的代码和澄清评论。

这些微优化通常是必要的,因为保存操作码只会减少方法的字节码大小,这反过来主要影响JIT的解释器和早期内联决策。或者换句话说,一旦代码变得足够热以进行JIT,它并不会真正影响生成的程序集,因为编译器将能够看到这些负载都引用相同的变量。

String是JVM中非常重要的一个类,其中这种微小的优化可能会稍微提高启动速度。

另一方面,BigInteger对于JVM启动并不重要,如果经常使用它,这将被JIT优化掉,因为解释器性能通常与BigInt用例无关。