Почему я не вижу код, сгенерированный JIT?

Я пытаюсь увидеть код, сгенерированный Java JIT, пока это мой Main.java:

class Foo {
  public static int bar() { return 42; }
}
class Main {
  public static void main(String... args) {
    System.exit(Foo.bar());
  }
}

Я бегу так:

$ javac Main.java && java -XX:+UnlockDiagnosticVMOptions -XX:+PrintOptoAssembly Main

============================= C2-compiled nmethod ==============================

============================= C2-compiled nmethod ==============================

Где код?

Метод может выполняться только один раз, вы не получите JIT при одном выполнении метода. JVM сразу же завершается после этого метода.

Elliott Frisch 20.06.2023 16:05

@MarkRotteveel, ты прав. Я предлагаю вам удалить комментарий и опубликовать ответ, я буду рад принять его.

yegor256 21.06.2023 08:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что при нормальных обстоятельствах код изначально интерпретируется и только JIT-компилируется, когда он горячий (вызывается много, по умолчанию 10000).

Чтобы заставить код компилироваться немедленно, используйте опцию -Xcomp, а затем используйте -XX:+PrintAssembly (честно говоря, смысл -XX:+PrintOptoAssembly мне не совсем ясен, за исключением того, что в данном случае он, похоже, не печатает сборку ;).

Короче говоря, используйте:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp Main

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