gpt4 book ai didi

java - 声明 boolean 值优化

转载 作者:行者123 更新时间:2023-12-01 17:01:11 26 4
gpt4 key购买 nike

java编译器会对此进行优化吗:

boolean foo1 = getSomeHardToGetBoolean();
boolean foo2 = getSomeEasyToGetBoolean();
if(foo1 && foo2){
//do stuff
}

对此:

if(getSomeEasyToGetBoolean() && getSomeHardToGetBoolean()){
//do stuff
}

甚至是这样:

if(getSomeHardToGetBoolean() && getSomeEasyToGetBoolean()){
//do stuff
}

我使用第一种方法作为可读性的一般做法,但代价是什么?

旁注:假定为 Java 8。使用 JIT。 boolean 值直到运行时才能确定。 boolean 值彼此完全独立。不管怎样,我可能不会停止使用第一种方式,但我只是好奇。谢谢!

最佳答案

优化器必须维护程序的语义。因此,如果 getSomeEasyToGetBoolean()getSomeHardToGetBoolean() 具有可观察到的副作用,优化器无法消除这些副作用,因为这会改变程序的语义。

但是,如果这些操作没有明显的副作用,优化器确实会执行诸如内联、重新排序和将条件移动到代码块开头等转换,这些转换属于优化器的标准指令。

这就是为什么在没有适当同步结构的情况下访问公共(public)数据结构的多线程程序可能会严重中断的原因,因为在这种情况下,线程可能会观察到执行优化代码的线程的行为变化。

关于java - 声明 boolean 值优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27551904/

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