2011-11-11 3 views
3

は、私はこのようなコードを持っている:AndroidのJavaコンパイラのopimization

MyLog.d("TAG", "debug string " + aVariable + " more debug string =" + anotherVariable); 

そしてMyLogクラスを私の質問は、私がfalseにDEBUGを設定した場合、Javaコンパイラがスマートにこのことを検出アンドロイドますです

public void d(String tag, String message) { 
    private static final boolean DEBUG = true; 
    if (DEBUG) { 
     Log.d(tag, message); 
    } 
} 

のようなものですコード

MyLog.d("TAG", "debug string " + aVariable + " more debug string =" + anotherVariable); 

のラインは

012何もしません

と、それは「デバッグ文字列」+ aVariable +「より、デバッグ文字列=」+のための一時的な文字列オブジェクトを作成しませんanotherVariableは

+2

これは心配するほど重要ですか?マイクロ最適化は、後で使用するほうがいいです(決して意味がない)。 –

+0

この関連するスタックオーバーフローの質問は本当に関連していますが、まだこの質問への明確な答えがありませんstackoverflow.com/questions/8050799 – Elemental

+0

@エレメンタルうわー、現在の質問は、 "ProGuardがどのくらい行くでしょう" ... –

答えて

2

あなたはDEBUG事項に関することなら何でもする前に、文字列の連結をやっている:私はそれはないだろうProGuardによって最適化されますが、Log.dMyLog.dの中のコールは消えます。

バイトコードをチェックすると、報告する価値があります。 ProGuardがデッドコードを検出するためにコールチェーンにどのくらいの距離を置いているのか不思議です。文字列の連結がなくなると私は驚くだろう。

また、メソッド内で変数privateを宣言することもできません。

+1

+1もしプロガードがそれを取り除くなら、興味があります! – Peterdk

関連する問題