Я пытаюсь увидеть код, сгенерированный 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 ==============================
Где код?
@MarkRotteveel, ты прав. Я предлагаю вам удалить комментарий и опубликовать ответ, я буду рад принять его.




Проблема в том, что при нормальных обстоятельствах код изначально интерпретируется и только JIT-компилируется, когда он горячий (вызывается много, по умолчанию 10000).
Чтобы заставить код компилироваться немедленно, используйте опцию -Xcomp, а затем используйте -XX:+PrintAssembly (честно говоря, смысл -XX:+PrintOptoAssembly мне не совсем ясен, за исключением того, что в данном случае он, похоже, не печатает сборку ;).
Короче говоря, используйте:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp Main
Метод может выполняться только один раз, вы не получите JIT при одном выполнении метода. JVM сразу же завершается после этого метода.