Одним из важных отличий динамической компиляции является то, что она оптимизирует базовую часть кода и способ его запуска. Существует опция -XX:CompileThreshold=
, которая по умолчанию равна 10000. Вы можете уменьшить это, чтобы он быстрее оптимизировал код, но если вы запустите сложное приложение или тест, вы обнаружите, что уменьшение этого числа может привести к замедлению кода. Если вы запустите простой тест, вы, возможно, не обнаружите, что это имеет какое-либо значение.
Одним из примеров, где динамическая компиляция имеет преимущество перед статической компиляцией, является встраивание «виртуальных» методов, особенно тех, которые можно заменить. Например, JVM может встроить до двух активно используемых «виртуальных» методов, которые могут быть скомпилированы в отдельный jar-файл после компиляции вызывающей стороны. Вызываемые банки могут быть даже удалены из работающей системы, например OSGi и добавьте другую банку или замените ее. Методы замены JAR могут быть встроены. Этого можно добиться только с помощью динамической компиляции.