Sergio 2.1
Оракул
(67303)
1 год назад
Да, JVM (Java Virtual Machine) - это виртуальная машина Java, которая транслирует байт-код в машинный код и интерпретирует его. Так что это и транслятор, и интерпретатор. JVM содержит внутри себя и интерпретатор, и транслятор (just-in-time translator, JIT). Сначала программа исполняется интерпретатором, и для каждого метода накапливается статистика, сколько раз он вызывался. Как только обнаружатся часто исполняемые методы, они транслируются в машинный код, а редко исполняемые продолжают интерпретироваться. Этот процесс идет постоянно, самые часто исполняемые методы подвергаются перекомпиляции с многоуровневой оптимизацией, чтобы сделать код максимально эффективным. Поэтому при любых замерах скорости исполнения Java-программы надо сначала ее "прогреть", то есть сделать холостой прогон, и лишь потом замерять время (но в том же процессе ОС, естественно).