第一に、他のものよりもいずれかを使用することのパフォーマンス上の利点は、関連するには小さすぎる可能性が最も高いです。コードの単純さ/読みやすさ/保守性ははるかに重要です...ほとんどの場合。
いずれの例にも、Boolean
インスタンスの作成は含まれていません。
Boolean
理論的には、4つのうち3つがクラスの初期化をトリガーする可能性があり、アプリケーションがそれを行わなかった可能性があります。その可能性が非常に低いイベントでは、アプリケーション全体で、他の方法では割り当てられなかった2つのオブジェクトが割り当てられます。初期化にはおそらく数マイクロ秒かかり、長期的には数バイトのRAM(50未満)を消費します。
これは、レジスタをゼロに設定するだけなので、他のすべてと同等かそれよりも高速になります。
boolean isItTrue(arg){
return true;
}
単独で考えると、これはレジスタをゼロにするのではなく、メモリから静的参照をロードする必要があります。ただし、状況によっては、JITコンパイラーがこれを最適化できる場合があります。
Boolean isItTrue(arg){
return Boolean.TRUE;
}
表面的には、これにはBoolean.valueOf(true)
「ボックス」への呼び出しが含まれますtrue
が、JITコンパイラーは、呼び出しをインライン化することにより、前のコードと同じコードに最適化できるはずです。
Boolean isItTrue(arg){
return true;
}
表面的には、これには、のBoolean.booleanValue(Boolean.TRUE)
「ボックス化解除」への呼び出しが含まれBoolean
ます。この呼び出しはインライン化できます。Boolean
JITコンパイラーが、オブジェクトへの参照のロードとその値フィールドのフェッチを回避できる可能性もあります。
boolean isItTrue(arg){
return Boolean.TRUE
}
結論として、4つの選択肢の相対的なパフォーマンスは、JITコンパイラーが最適化にどれだけ成功するかによって異なります。これは、コンテキスト、JITコンパイラの詳細、JVM設定などによって異なります。最良の場合、JITコンパイラーは(少なくとも理論的には)それらすべてに対して同じ(最適な)コードを生成できます。