Что вы подразумеваете под "сколько раз объект используется"?Сколько раз (один из) его конструкторов вызывали?Или сколько раз были вызваны методы объекта?Пожалуйста, уточните ...
В любом случае, есть несколько способов сделать это.
Вы можете использовать свой любимый профилировщик, я думаю, вам понадобитсяиспользовать режим «трассировки» (режим, который выполняет инструментирование, а не режим выборки).
Если перекомпиляция класса является опцией, чем вы можете сделать следующее: Скажите,у вас есть класс Foo с некоторыми составителями:
открытый класс Foo {
public Foo (int i) {
// some constructor
}
public Foo (Строка s) {// еще один конструктор}
}
Скажем, вы хотите знать, сколько раз вызывались ваши конструкторы (то есть, сколько раз объект имелбыл создан)
Таким образом, вы можете использовать статический элемент данных и увеличивать число при каждом вызове конструктора.Например:
public class Foo {
private static int count = 0;
public Foo(int i) {
// if we're here, the object is being created now:
count++;
.....
}
...
}
Затем вы можете сделать снимок кучи (например, с помощью jmap, который находится в JAVA_HOME / bin). Сгенерированный дамп может быть открыт с помощью jhat или снова вашим любимым профилировщиком, и вы сможетечтобы увидеть, исследуя состояние объекта.
Конечно, этот подход справедлив и для вызовов методов.Это будет работать до тех пор, пока ваши объекты создаются одним и тем же загрузчиком классов.
3.Если вы не можете перекомпилировать свой код, но по-прежнему не хотите использовать профилировщик, вы можете использовать свой байт-код длядостичь того же эффекта, что и в 2. Вы можете рассмотреть возможность использования таких фреймворков, как AspectJ, здесь есть много других ...
Я думаю, что профилировщик - самый быстрый подход здесь. Надеюсь, это поможет