Профилирование JVMTI: вычисление количества стековой памяти

Я работаю над агентом JVMTI, который отслеживает использование памяти приложением. Мне удалось контролировать распределение памяти в куче, используя инструментарий байт-кода, так что собственный метод вызывается всякий раз, когда выделяется новый объект / массив. Но я действительно запутался в том, как определить объем памяти, выделенной в стеке. Если бы вы могли предоставить какие-либо идеи, советы или ссылки, я был бы очень признателен.

1 ответ

Решение

Сколько деталей вы надеетесь получить от интерфейса JVMTI? Похоже, он сообщает только информацию о логическом фрейме стека Java, что означает, что вы не можете узнать, сколько фактического пространства стека во время выполнения используется, но вы можете использовать jmethodID чтобы выяснить компоновку фрейма стека Java, чтобы сделать разумное предположение (количество локальных переменных фиксировано для конкретного метода во время компиляции, см. GetLocalVariableTable). Кадры стека для нативных методов не будут видны. И другие состояния JVM, хранящиеся в стеке (например, информация об отладке или пространство, используемое JIT, и инфраструктура потоков) также не будут видны.

Другие вопросы по тегам