【发布时间】:2014-07-02 09:15:12
【问题描述】:
考虑以下设置:
// debugger class
public class Debug
{
// setting
public final static boolean DEBUG = false;
void print_checked( String s )
{
if( DEBUG )
System.out.print( s );
}
void print_unchecked( String s )
{
System.out.print( s );
}
}
// worker class
public class Algorithm
{
Debug debugger;
public void heavyWeightAlgorithmImplementation()
{
// method 1
debugger.print_checked( "This method 1" );
// method 2
if( debugger.DEBUG )
debugger.print_unchecked( "Or this method 2" );
}
}
我读过here,Java 中的final booleans 很可能会被优化掉。然而,在我的设置中,if 条件在另一个类中,目前在print_checked() 中实现。 Java 是否也优化了函数调用(方法 1),还是我必须像方法 2 一样重写所有内容?
编辑#1:再次添加静态
【问题讨论】:
-
我很确定该方法将被内联,因此使用方法 2 将一无所获。
-
你有没有试过两者看看是否有任何可衡量的差异?如果此代码对时间要求不是很高,请使用更易于维护的版本。
-
您可能会节省 0.000000000001 秒
-
如果重复数十亿次,即使是 1ns 的差异也会变得显着。
-
它将被优化出来。 Java 可以看到 if 语句确实读取了
if(false)并将删除整个代码块。我会在 JLS 中寻找位置
标签: java optimization