2012-04-24 2 views
1

Возможно ли получить значения регистра счетчика программ (ПК) для запуска Java-приложения, в частности, для запуска в Android-эмуляторе? gprof, например, случайным образом отображает значения регистра ПК, чтобы найти, какая функция потребляет время работы программы. Означает ли такая концепция смысл JVM? Чтобы уточнить, мне нужны фактические значения счетчика программ.Значения регистра счетчика программ для Java-программы

Кроме того, есть ли способ измерить, как «разложить» код в памяти? Это можно несколько измерить в обычной программе, просмотрев диапазон адресов, возвращаемых objdump. Однако этот подход не обрабатывает адрес разделяемых библиотек, что опять-таки является понятием, которое я не понимаю в контексте JVM.

+0

Поскольку Dalvik сильно отличается от обычных JVM, почти наверняка не будет решения, которое работает для обоих. –

ответ

0

Многие профилировщики Java, такие как VisualVM, могут выполнять профилирование на основе выборки, которое, вероятно, работает так, как вы описываете.

Что касается использования памяти кода, то это то, что в основном содержит «постоянное поколение» (PermGen) сборщика мусора; VisualVM также может отобразить это.

+0

Прошу прощения за то, что я не был достаточно ясен в исходном вопросе; Я действительно хочу, чтобы значения счетчиков программ получили представление о распространении макета программы. В идеале, мне нужна гистограмма значений ПК. – arunchaganty

+0

@arunchaganty: взгляните на API JVMTI: http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html - если его там нет, вы не можете этого сделать. Но обычно не имеет смысла идти на этот уровень с Java. –

+0

@ Micheal Спасибо за эту ссылку. Формат 'jlocation', по-видимому, может соответствовать собственному расположению машины. Также кажется, что «GetFrameLocation» может предоставить соответствующую информацию. Должен ли я написать свой собственный инструмент, чтобы получить эту информацию? – arunchaganty

Смежные вопросы