gpt4 book ai didi

java - 是否优化过一次使用的变量定义?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:00 25 4
gpt4 key购买 nike

考虑以下方法:

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 完成的。

虽然局部变量本身与优化有些无关 - 多运算符表达式仍然需要各种操作数逻辑上进入堆栈,只是在未命名的“插槽”中。您可能会发现为您的两个实现生成的字节码非常相似,只是在第二种情况下没有名称。

更重要的是,通过减少您使用的局部变量的数量可能偶尔出现的任何性能优势几乎肯定是微不足道的。第一种方法的可读性优势可能更为显着。一如既往,避免在没有证据证明您尝试优化的地方是瓶颈的情况下进行微优化,然后只允许进行已经证明其值(value)的优化。

(当您证明您需要优化特定方法时,您已经拥有测试任何潜在优化的工具,因此您无需猜测。)

关于java - 是否优化过一次使用的变量定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com