[Android优化NDK函数与Java最终布尔值

问题描述 投票:0回答:1

我有一些仅适用于内部版本的日志记录代码,并且我在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());
    }
}
java android compiler-optimization javac jit
1个回答
0
投票

在第一种情况下优化测试几乎肯定超出了JIT编译器的功能。

在第二种情况下,当表达式为计算结果为[[编译时常量表达式时,Java编译器可能会优化掉if语句。 C0]。此“条件编译”功能在false(本节末尾)中进行了描述。 注意事项:

此功能仅适用于JLS 14.21语句和

    仅在if意义上测试(编译时间)
  • 常量表达式
  • 时有效。
  • 由于此优化JLS 15.28检查字节码来轻松确认您的编译器正在完成此优化。

    1-JLS文本说:


    “一个优化的编译器...

    may

    选择从生成的类文件中省略该语句的代码...”

    。从技术上讲,这不是必需的。
  • © www.soinside.com 2019 - 2024. All rights reserved.