为什么其他 类 像 jdk7 中的 BigInteger 不使用 "avoid getfield opcode" 技术就像 String.trim
why other classes like BigInteger in jdk7 does not use "avoid getfield opcode" tech just like String.trim
为什么 BigInteger 不使用局部变量来避免 getfield 操作码?
BigInteger 中的 mag 和 String 中的值都是最终值。
BigInteger 的源代码和操作码
String.trim的来源
与其问为什么它不这样做,不如问 为什么首先要这样做?,考虑到这需要额外的代码和澄清注释。
这些微优化通常 不是 必要的,因为保存操作码只会减少方法的字节码大小,这反过来主要影响解释器和早期内联决策JIT。或者换句话说,一旦代码变得足够热可以进行 JIT 处理,它就不会真正影响生成的程序集,因为编译器将能够看到这些加载都指向同一个变量。
字符串在 JVM 中是一个非常重要的class,这种微小的优化可能会稍微提高启动速度。
另一方面,BigInteger 对 JVM 启动并不重要,如果您经常使用它,它无论如何都会被 JIT 优化掉,解释器性能通常与 BigInt 用例无关。
为什么 BigInteger 不使用局部变量来避免 getfield 操作码?
BigInteger 中的 mag 和 String 中的值都是最终值。
BigInteger 的源代码和操作码
String.trim的来源
与其问为什么它不这样做,不如问 为什么首先要这样做?,考虑到这需要额外的代码和澄清注释。
这些微优化通常 不是 必要的,因为保存操作码只会减少方法的字节码大小,这反过来主要影响解释器和早期内联决策JIT。或者换句话说,一旦代码变得足够热可以进行 JIT 处理,它就不会真正影响生成的程序集,因为编译器将能够看到这些加载都指向同一个变量。
字符串在 JVM 中是一个非常重要的class,这种微小的优化可能会稍微提高启动速度。
另一方面,BigInteger 对 JVM 启动并不重要,如果您经常使用它,它无论如何都会被 JIT 优化掉,解释器性能通常与 BigInt 用例无关。