Подробности выполнения Java в System.out

Поскольку я помню, что существует волшебный параметр командной строки в Java, которые включают запись операций, которые в настоящее время выполняются к консоли. Вывод был кодом байта, на который походят.

-verbose не соответствует, поскольку это печатает только загрузку класса, в то время как эта информация о выводах опции как выделение памяти, устанавливая локальные переменные и т.д. Это было очень подробно, как 10 строк для "Привет мира".

Я не нашел его ни здесь http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp, ни здесь http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html, Также я нашел некоторые флаги здесь, но большинство из них работает только в openjdk или в разработать режиме. Возможно, существует способ, которым я могу запустить, java.exe в Windows в этом разрабатывает режим? Или возможно существует другой набор флагов, что это перечисляет мисс?

6
задан John 1 June 2010 в 08:08
поделиться

4 ответа

В windows используйте Ctrl-Break для создания дампа потока. Для мониторинга загрузки классов используйте -verbose:class для сборки мусора -verbose:gc

1
ответ дан 17 December 2019 в 04:42
поделиться

Поддерживаемые опции здесь. Ближе всего к вашему описанию я могу найти -verbose:gc, или, возможно, -verbose:class.

javap выведет байткод, но это статический дизассемблер, не имеющий отношения к времени выполнения.

1
ответ дан 17 December 2019 в 04:42
поделиться

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

Обратите внимание, однако, что вы вряд ли получите дамп того, какие байт-коды выполняются. Это связано с тем, что JIT-движок HotSpot, который существует уже несколько лет, преобразует байт-коды в собственные инструкции перед выполнением, поэтому к тому времени, когда код действительно будет выполнен, для инструментария просто не останется байт-кодов. Теоретически вы могли бы создать специальную виртуальную машину, которая работала бы по-старому, но это было бы ужасно медленно (как в старые добрые времена), поэтому зачем вам это действительно нужно?

1
ответ дан 17 December 2019 в 04:42
поделиться

Не совсем то, что вы просили, но я большой поклонник "kill -3" для идентификатора процесса Java, который выдает всевозможную информацию о каждом потоке и его состоянии. в том, какие замки они держат и каких ждут, и тому подобное.

2
ответ дан 17 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: