Android优化NDK函数与Java最终布尔值 我有一些日志代码,应该只适用于内部构建,我在NDK C++中有逻辑来决定这是内部构建: native boolean isInternalBuild(); void log() { if (isInternalBuild()) { Log.d("LOG", "Log this: " + someLogicToComputeLog()); } }

Android优化NDK函数与Java最终布尔值 我有一些日志代码,应该只适用于内部构建,我在NDK C++中有逻辑来决定这是内部构建: native boolean isInternalBuild(); void log() { if (isInternalBuild()) { Log.d("LOG", "Log this: " + someLogicToComputeLog()); } },java,android,compiler-optimization,javac,jit,Java,Android,Compiler Optimization,Javac,Jit,如果我切换到Java final boolean,Java编译器或JIT是否能够对其进行优化,或者它的性能是否大致相同: 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 final boolean,Java编译器或JIT是否能够对其进行优化,或者它的性能是否大致相同:

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编译器的能力

在第二种情况下,当表达式是计算结果为false的编译时常量表达式时,Java编译器很可能会优化if语句,但不能保证。本节末尾的中介绍了此条件编译功能

警告是:

此功能仅适用于if语句,并且 它只在测试编译时常量表达式时起作用。 由于此优化通常由Java字节码编译器完成,因此您可以通过使用javap检查字节码轻松确认编译器正在完成此优化


1-JLS文本说:优化编译器。。。可以选择从生成的类文件中省略该语句的代码。。。。从技术上讲,不需要这样做。

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

在第二种情况下,当表达式是计算结果为false的编译时常量表达式时,Java编译器很可能会优化if语句,但不能保证。本节末尾的中介绍了此条件编译功能

警告是:

此功能仅适用于if语句,并且 它只在测试编译时常量表达式时起作用。 由于此优化通常由Java字节码编译器完成,因此您可以通过使用javap检查字节码轻松确认编译器正在完成此优化

1-JLS文本说:优化编译器。。。可以选择从生成的类文件中省略该语句的代码。。。。技术上不需要这样做