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