причина, по которой методы не компилируются в JVM Hotspot - PullRequest
3 голосов
/ 28 июня 2010

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

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

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

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

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

1 голос
/ 13 апреля 2016

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

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

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

...