javaでいつでもクラスのインスタンスがいくつ作成されるかを知るにはどうすればよいですか? 私はクラス A を持っています。特定の時点で作成されるインスタンスの数を知りたいですか? 解決策を教えてください
4 に答える
静的変数を使用して、コンストラクターでそれを追跡します。
public class A {
private static int instances = 0;
public A() {
instances++;
}
}
同時実行性が懸念される場合:
public class A {
private static final Object LOCK = new Object();
private static int instances = 0;
public A() {
synchronized(LOCK) {
instances++;
}
}
}
質問の下のコメントであなたが言ったことに対処するには、現在いくつ存在するか(つまり、ガベージ コレクションされていないか) を知りたい場合は、次のようなことを試すことができます。
public class A {
private static final Object LOCK = new Object();
private static int instances = 0;
public A() {
synchronized(LOCK) {
instances++;
}
}
protected void finalize() throws Throwable {
synchronized(LOCK) {
instances--;
}
}
}
このfinalize()
メソッドは、オブジェクトがガベージ コレクションされる直前に呼び出されます。ただし、ガベージ コレクションは信頼性が低いことで有名です。
また、 @rolfl が以下で述べているように、ブロックでAtomicInteger
はなくクラスを使用することもできます。そのアイデアに対するすべての賛成票は、彼が投稿した場合、彼の回答に送られる必要があります。int
synchronized
それは実際にはそれほど悪い質問ではありません。同期化とカウンターを使用してインスタンスの数を制御できます。この設計パターンはインスタンス制御クラスと呼ばれ、Joshua Bloch (第2章)
直接的な方法はありませんが、この情報を追跡することに本当に関心がある場合は、private static int instanceCounter
フィールドを作成してコンストラクターでインクリメントすることができます。finalize
インスタンスがガベージ コレクションされるたびにカウンターをデクリメントするメソッドも必要です。
初期化時にカウンターを実装できます