http://en.wikipedia.org/wiki/Double_checked_locking_pattern#Usage_in_Javaで最適化としてローカル変数を使用しています。283 を追加すると、「Java VM の一部のバージョン」で 25% 高速になります。この種のローカル変数の利点は、関連する変数が静的な場合にも適用されますか? Android にも適用されますか?
では、これらgetInstance()
の s のうち、Android でより高速なのはどれですか (または同じですか?):
A:
class Something {
private static volatile Something instance = null;
public static Something getInstance(Context context) {
Something local = instance;
if (local==null) {
synchronized(Something.class) {
local = instance;
if (local==null) {
instance = local = new Something(context);
}
}
}
return local;
}
}
また
B.
class Something {
private static volatile Something instance = null;
public static Something getInstance(Context context) {
if (instance==null) {
synchronized(Something.class) {
if (instance == null) {
instance = new Something(context);
}
}
}
return instance;
}
}
なぜ?
(心配しないでください。 はSomething
への参照を保持しませんcontext
。インスタンス化に必要なため、一時的に使用するだけです。そのため、インスタンス化を「怠惰」にする必要があるようです。)
あなたの答えが「テストするだけ」である場合、そのための手順を教えてもらえますか? しかし、違いがある場合は、違いの理由を知りたいです(とにかくないかもしれません)。