используя параметр jvm -XX: + PrintCFGToFile, где создается файл output.cfg?

Я установил сборку быстрой отладки JDK 6 и выполнил эту команду :

java -XX:+PrintCFGToFile Test

но файл с печатной информацией не найден ... Я пробовал это как в операционных системах Linux, так и в Windows, но безуспешно. После отказа я собрал JDK из исходников (Исходники OpenJDK 7, Ubuntu), но безуспешно, снова то же самое, он печатает "VM option '+PrintCFGToFile'", но файл не создается ни в каталоге с выполненным классом, ни в каталоге bin JDK... Я искал "output.cfg" в файловой системе ничего не найдено... Я проверил исходники, и кажется, что файл действительно имеет имя "output.cfg" (если не ошибаюсь, это CFGPrinter)

Что случилось? Должны ли быть указаны какие-либо дополнительные параметры? Как и где взять этот файл с информацией о графе потока управления?


person Maxym    schedule 13.02.2012    source источник


Ответы (2)


Что ж, большое спасибо списку рассылки OpenJDK, особенно Кристал Мок, которая ответила на этот мой вопрос, и за то, чтобы не оставлять этот вопрос без ответа здесь и делиться им с сообществом:

В HotSpot есть два JIT-компилятора:
1) C1, он же клиентский JIT
2) C2, он же серверный JIT
, так как я использовал Ubuntu, HotSpot использовал компилятор C2, а PrintCFGToFile применяется только к C1.

Возможно, вы захотите включить -XX:+TieredCompilation, если вы действительно хотите, чтобы этот флаг работал на вашей текущей платформе.

был совет, поэтому решение:

java -XX:+PrintCFGToFile -XX:+TieredCompilation Test

запустив его, я получаю файл output.cfg в папке с выполненным классом (как и ожидалось)

исходный ответ (и ветка)

person Maxym    schedule 14.02.2012

Насчет C1/C2 верно. И только метод, скомпилированный с помощью JIT, может создать CFG, -XX:+PrintCompilation опция может сообщить, какой метод скомпилирован.

person Paul Hohensee    schedule 27.03.2012