Я недавно использовал jvisualvm
; может быть, это даст вам то, что вы хотите? Он выполняет профилирование как использования памяти, так и использования процессора, может выгружать стеки потоков и даже может убедить JVM перечислить, что происходит активность загрузчика классов (с помощью поддержки MBean: перейдите к java.lang
→ ClassLoading
, выберите Attributes
и обновление Verbose
; оно по-прежнему сбрасывается до System.out
, конечно). Самое замечательное в этом то, что вам ничего не нужно, чтобы включить его (обычно); Вы можете просто подключиться к уже работающим JVM. (Если у вас есть Java 1.5, используйте jconsole
.)
Обратите внимание, что вы вряд ли получите дамп того, какие байтовые коды выполняются. Это связано с тем, что движок HotSpot JIT, который существует уже несколько лет, преобразует байт-коды в собственные инструкции перед выполнением, поэтому к тому моменту, когда код фактически исполняется, для инструментария для отчета просто не осталось байт-кодов. Теоретически вы могли бы создать специальную виртуальную машину, которая работала бы по-старому, но она была бы ужасно медленной (как в старые добрые времена), так что с чего бы вам этого хотелось?