我有一些仅适用于内部版本的日志记录代码,并且我在NDK C ++中具有逻辑来决定这是否是内部版本:
native boolean isInternalBuild();
void log() {
if (isInternalBuild()) {
Log.d("LOG", "Log this: " + someLogicToComputeLog());
}
}
Java编译器或JIT是否能够对其进行优化,以防万一我切换到Java最终布尔值,或者它执行的效果大致相同:
static final boolean INTERNAL_BUILD = false; // or true in case this is an internal build
void log() {
if (INTERNAL_BUILD) {
Log.d("LOG", "Log this: " + someLogicToComputeLog());
}
}
在第一种情况下优化测试几乎肯定超出了JIT编译器的功能。
在第二种情况下,当表达式为计算结果为[[编译时常量表达式时,Java编译器可能会优化掉if
语句。 C0]。此“条件编译”功能在false
(本节末尾)中进行了描述。 注意事项:
此功能仅适用于JLS 14.21语句和
if
意义上测试(编译时间)1-JLS文本说: may
“一个优化的编译器...