これについて多くのトピックやリソースがあることは知っていますが、非常に具体的な質問について疑問に思っています (すべてのソースをチェックして明確な答えを得るには非常に長い時間がかかる場合があります)。
final static
JVM/Dalvik は、クラスの静的フィールド (プリミティブ値を除く) にアクセスするまでに、クラスの静的フィールドが既に初期化されていることを保証していることを知っています。逆もまた然り?クラスにまったくアクセスしない場合(たとえば、別の静的メソッドのコードが特定のブランチに到達しないため)、VM がこのクラスの静的を初期化しないswitch-case
ことが保証されますか?
次のようなクラスがあるとします。
public class Boo {
public static int[] anything = new int[] { 2,3,4 };
private static int[] something = new int[] { 5,6,7 }; // this may be much bigger as well
public static final int[] getAndClear() {
int[] st = something;
something = null;
return st;
}
}
Boo
私のアプリケーションは非常に特別なもので (一部の点では典型的ではありません)、 (コード ジェネレーターによって生成された)などの数百のクラスを保持するsomething
場合があります。まあ時々)。
アプリケーションの入力によっては、これらの事前生成されたクラスの多くがアクセスされない場合があります。多くのオブジェクトが不必要に初期化されて、多くのメモリが消費されることは望ましくありません。int[]