Предположим, у вас есть цикл, который нужно выполнить миллион раз.
«Истинному» интерпретатору необходимо проверять его байт-код на каждой итерации цикла и выяснять, как код должен влиять на состояние системы (вызовы и т. Д.).
JIT-компилятор только один раз просматривает байт-код 1 и компилирует его в собственный код, который затем может быть понят непосредственно компьютером - дальнейший перевод не требуется. Перевод занимает время, поэтому, если вы можете сделать это только один раз, он будет более эффективным.
Чтобы привести пример из реальной жизни: если у вас был роман на английском языке, и некоторые французы, которые интересовались им, вы могли бы отдать книгу кому-то, кто знал оба языка, кто мог ее прочитать. вслух каждому человеку индивидуально. Или вы можете заставить этого человека забрать книгу, перевести ее на французский, а затем дать каждому французу копию книги на французском языке. Если книга интересует только одного человека, то оперативный перевод более эффективен - нет необходимости в редакторе, специалисте по верстке, принтере и т. Д., Но если у вас есть много людей, которые хотят прочитайте книгу, а затем сделайте более тщательный одноразовый перевод
имеет больше смысла.
1 Некоторые JIT, в том числе в HotSpot, на самом деле JIT-компилируют один и тот же код несколько раз с разными уровнями оптимизации, в зависимости от использования.