Доступ к стеку JVM - PullRequest
       1

Доступ к стеку JVM

0 голосов
/ 24 января 2012

Я хочу знать, когда и сколько раз объект используется во время работы программы. Нужен ли мне доступ к стеку JVM для этого или есть другой способ сделать то же самое?

Ответы [ 2 ]

6 голосов
/ 24 января 2012

Вам нужно использовать профилировщик, чтобы сделать это.Что-то вроде YourKit или JProfiler или VisualVM.

1 голос
/ 24 января 2012

Что вы подразумеваете под "сколько раз объект используется"?Сколько раз (один из) его конструкторов вызывали?Или сколько раз были вызваны методы объекта?Пожалуйста, уточните ...

В любом случае, есть несколько способов сделать это.

  1. Вы можете использовать свой любимый профилировщик, я думаю, вам понадобитсяиспользовать режим «трассировки» (режим, который выполняет инструментирование, а не режим выборки).

  2. Если перекомпиляция класса является опцией, чем вы можете сделать следующее: Скажите,у вас есть класс 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, здесь есть много других ...

Я думаю, что профилировщик - самый быстрый подход здесь. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...