Android优化NDK函数与Java最终布尔值 我有一些日志代码,应该只适用于内部构建,我在NDK C++中有逻辑来决定这是内部构建: native boolean isInternalBuild(); void log() { if (isInternalBuild()) { Log.d("LOG", "Log this: " + someLogicToComputeLog()); } }
如果我切换到Java final boolean,Java编译器或JIT是否能够对其进行优化,或者它的性能是否大致相同: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()
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文本说:优化编译器。。。可以选择从生成的类文件中省略该语句的代码。。。。技术上不需要这样做