Байт-код Java: чудеса или реальность?

Байт-код JavaОсновная особенность Java, которая позволяет решать описанные ранее про­блемы обеспечения безопасности и переносимости программ, состоит в том, что компилятор Java выдает не исполняемый код, а так называемый байт-код в выс­шей степени оптимизированный набор инструкций, предназначенных для выполнения в исполняющей системе Java, называемой виртуальной машиной Java (Java Virtual Machine — JVM). Собственно говоря, первоначальная версия виртуальной машины JVM разрабатывалась в качестве интерпретатора байт-кода. Это может вызывать недоумение, поскольку для обеспечения максимальной производитель­ности компиляторы многих современных языков программирования призваны создавать исполняемый код. Но то, что программа на Java интерпретируется вир­туальной машиной JVM, как раз помогает решить основные проблемы разработки программ для Интернета. И вот почему.

 

Трансляция программы Java в байт-код значительно упрощает ее выполнение в разнотипных средах, поскольку на каждой платформе необходимо реализовать только виртуальную машину JVM. Если в отдельной системе имеется исполняю­щий пакет, в ней можно выполнять любую программу на Java. Следует, однако, иметь в виду, что все виртуальные машины JVM на разных платформах, несмотря на некоторые отличия и особенности их реализации, способны правильно ин­терпретировать один и тот же байт-код. Если бы программа на Java компилирова­лась в машинозависимый код, то для каждого типа процессоров, подключенных к Интернету, должны были бы существовать отдельные версии одной и той же программы. Ясно, что такое решение неприемлемо. Таким образом, организация выполнения байт-кода виртуальной машиной JVM — простейший способ создания по-настоящему переносимых программ.

Тот факт, что программа на Java выполняется виртуальной машиной JVM, спо­собствует также повышению ее безопасности. Виртуальная машина JVM управля­ет выполнением программы, поэтому она может изолировать программу и воспре­пятствовать возникновению побочных эффектов от ее выполнения за пределами данной системы. Как станет ясно в дальнейшем, ряд ограничений, существующих в языке Java, также способствует повышению безопасности.

В общем, когда программа компилируется в промежуточную форму, а затем ин­терпретируется виртуальной машиной JVM, она выполняется медленнее, чем если бы она была скомпилирована в исполняемый код. Но в Java это отличие в произ­водительности не слишком заметно. Байт-код существенно оптимизирован, и по­этому его применение позволяет виртуальной машине JVM выполнять программы значительно быстрее, чем следовало ожидать.

Язык Java был задуман как интерпретируемый, но ничто не препятствует ему оперативно выполнять компиляцию байт-кода в машинозависимый код для повы­шения производительности. Поэтому вскоре после выпуска Java появилась техно­логия HotSpot, которая предоставляет динамический компилятор (или так называ­емый JIT-компилятор) байт-кода. Если динамический компилятор входит в состав виртуальной машины JVM, то избранные фрагменты байт-кода компилируются в исполняемый код по частям, в реальном времени и по требованию. Важно по­нимать, что одновременная компиляция всей программы Java в исполняемый код нецелесообразна, пocкoлькyJava производит различные проверки, которые могут быть сделаны только во время выполнения. Вместо этого динамический компи­лятор компилирует код во время выполнения по мере надобности. Более того, компилируются не все фрагменты байт-кода, а только те, которым компиляция принесет выгоду, а остальной код просто интерпретируется. Тем не менее прин­цип динамической компиляции обеспечивает значительное повышение произ­водительности. Даже при динамической компиляции байт-кода характеристики переносимости и безопасности сохраняются, поскольку виртуальная машина JVM по-прежнему отвечает за целостность исполняющей среды.

 

Вас заинтересует / Intresting for you:

Распространенные заблуждения о...
Распространенные заблуждения о... 1650 просмотров Ирина Светлова Thu, 21 Jun 2018, 18:35:12
Выбор среды для разработки код...
Выбор среды для разработки код... 1616 просмотров Stas Belkov Sun, 10 Jun 2018, 14:21:35
Как выполнить / скомпилировать...
Как выполнить / скомпилировать... 3228 просмотров Stas Belkov Thu, 21 Jun 2018, 18:32:00
Аплеты Java и Интернет
Аплеты Java и Интернет 1619 просмотров Ирина Светлова Sat, 09 Jun 2018, 10:17:34
Войдите чтобы комментировать