考虑以下方法:
private static long maskAndNegate(long l) {
int numberOfLeadingZeros = Long.numberOfLeadingZeros(l)
long mask = CustomBitSet.masks[numberOfLeadingZeros];
long result = (~l) & mask;
return result;
}
该方法可以缩写为:
private static long maskAndNegate(long l) {
return (~l) & CustomBitSet.masks[Long.numberOfLeadingZeros(l)];
}
这两种表示在实际运行时是否相等?换句话说,Java 编译器是否优化了我为了可读性和调试而放置的不必要的额外变量定义?
Java编译器本身几乎不做任何优化。 JIT 几乎完成了所有工作。
不过,局部变量本身与优化有些无关——多运算符表达式仍然需要各种操作数逻辑上进入堆栈,只是在未命名的“槽”中。您可能会发现为您的两个实现生成的字节码非常相似,只是没有第二种情况中的名称。
更重要的是,任何性能优势might occur 非常偶尔减少使用的局部变量的数量几乎肯定是微不足道的。第一种方法的可读性优势可能更为显着。与往常一样,在没有证据表明您尝试优化的地方是瓶颈的情况下,请避免进行微优化,然后只允许具有以下特征的优化:proved他们的价值。
(当你证明你need要优化特定方法,您已经拥有测试任何潜在优化的工具,因此您无需猜测。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)