への呼び出しに「公共の場のアプローチを」インライン化することはほぼ一定 ある(取られますあなたが引用符でに言及しているアプローチは、静的なファクトリです
// Singleton with public final field
public class Elvis {
public static final Elvis Elvis = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }
}
ながら::ブック"Effective Java" By Josh Bloch)から
// Singleton with static factory
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}
あなたが言った引用は、静的ファクトリーアプローチの「パフォーマンスペナルティ」(Elvis.INSTANCE
経由でフィールドを直接使用するのではなく、getInstance
というメソッドを呼び出しているため)がなくなった(または、コンパイラはコンパイルされたバイトコードの呼び出しをインライン化するのに十分なほどスマートなので、両方のアプローチのパフォーマンスは似ていますが、カプセル化を提供するので、第2のアプローチが優れています。
これは、もう少し多くのコンテキストを持つのに役立ちます。作者がバイトコードへのコンパイル、バイトコードからのJITコンパイル、またはVMが解釈中に行う可能性のある特定のバイトコード最適化について話しているかどうかは、あいまいです。 – lockcmpxchg8b
本を引用している場合は、必要に応じて完全な引用文と追加の文脈を入力してください。 – alfasin
これは少し話題ですが、その本は熟練のJavaプログラマーのためのものです –