причина того, что методы не компилируются в Hotspot JVM

Доступны флаги, предоставляющие журнальную информацию о скомпилированных методах. Где информация о методах, которые не скомпилировались и почему они не скомпилировались? Возможность увидеть, как компилятор точки доступа принимает свои решения, и причины, по которым он не компилирует определенные методы, даст мне лучшее понимание JVM и позволит мне писать лучший код и, возможно, оптимизировать некоторые из моих методов. Есть у кого мысли на эту тему?


person frank c.    schedule 28.06.2010    source источник


Ответы (2)


Согласно: http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html

-XX:+PrintCompilation выводит имя каждого Java-метода, который Hotspot решает JIT-компилировать. Список обычно сначала показывает набор основных методов класса Java, а затем переходит к методам вашего приложения.

Мое личное убеждение в том, что это просто отнимет у вас много времени. Если вы кодируете, используя лучшие практики и здравый смысл, а затем, если производительность является проблемой, профилируйте. Вы должны сделать хорошо.

person Romain Hippeau    schedule 29.06.2010
comment
Но, предположительно, он не будет печатать информацию о методах не, которые компилируются (и почему они не компилируются), о чем и идет речь. - person valiano; 13.06.2018

Ответ заключается в том, что методы не могут быть скомпилированы, если они не выполнялись достаточное количество раз. Кэш нативного кода ограничен, поэтому компиляция каждого метода контрпродуктивна; вы можете получить ряд методов, которые были скомпилированы, но тогда важные из них больше не помещаются в размер кеша.

Точные числа варьируются от версии к версии, но если вы запустите Java с -XX:+PrintFlagsFinal, вы увидите все настройки, которые вы можете настроить, включая Tier3CompileThreshold (имеет значение 2000) Tier4CompileThreshold (имеет значение 15000). Поэтому, если вы не вызовете свой метод более 2000 раз, он просто будет использовать интерпретатор для его выполнения.

Если вы хотите выполнить профилирование в условиях JIT, вам нужно выполнить значительное количество циклов, вызывающих методы, чтобы увидеть преимущества, или использовать профилирующие средства, такие как JMH для правильного профилирования.

person AlBlue    schedule 13.04.2016