マルチスレッド環境でクラスのインスタンスを1つだけ作成するには、以下の構造を持つシングルトンクラスを作成します。より良いパフォーマンスのためにJavaでシングルトンデザインパターンでNullチェックを乗り越える方法
class Singleton {
private volatile static Singleton _instance;
private Singleton() {
// preventing Singleton object instantiation from outside
}
public static Singleton getInstanceDC() {
if (_instance == null) {
synchronized (Singleton.class) {
if (_instance == null) {
_instance = new Singleton();
}
}
}
return _instance;
}
}
しかし、我々は、すべてのスレッドがnull check
をしながら、静的な関数からオブジェクトを取得する前に支払わなければならないペナルティの乗り心地を取得することによって、クラスのパフォーマンスを向上させることができる方法はありますか?
ヌルチェックは本当に安いです。これは、たとえ最適化が可能であっても、最適化について心配するものではありません。疑問です。特に、CPUがほとんど常に同じ方法をとるチェックが最適化されている場合、CPUは非常に魅力的です。これは基本的に無料で、あなたは心配することを_really _見つけなければなりません。 –
最初のアクセス時に '_instance'を作成するのではなく、静的に初期化できませんか?そうすれば、各アクセスでnullをチェックする必要はありません。 –
有効なJavaの第2版を参照 – AlexWien