Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы
На самом деле это не такой уж плохой вопрос, вы можете контролировать количество экземпляров с помощью sychronize и counter, этот шаблон проектирования называется классом, контролируемым экземпляром, и это одна из первых вещей, упомянутых в «эффективной Java», Джошуа Блох (глава 2)
Отслеживайте это в своем конструкторе с помощью статической переменной .
public class A {
private static int instances = 0;
public A() {
instances++;
}
}
Если concurrency вас беспокоит:
]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()
будет вызываться прямо перед тем, как объект будет собран мусором. Однако сбор мусора известен как ненадежный .
Кроме того, в качестве побочного примечания вы могли бы использовать класс AtomicInteger
, а не блоки int
и synchronized
, так как @rolfl говорит ниже. Все ответы на эту идею должны идти на его ответ, если он отправит сообщение.
Нет прямого пути, но если вы действительно заинтересованы в отслеживании этой информации, вы можете создать поле private static int instanceCounter
и увеличить его в своих конструкторах. Вам также понадобится метод finalize
, который уменьшает счетчик всякий раз, когда экземпляр собирает мусор.