Взгляд изнутри. 
Виртуальная машина Java

Java: Взгляд изнутри
Виртуальная машина Java (Java Virtual Machine)

Автор: Девид Райли



Java: Взгляд изнутри приоткрывает завесу над платформой Java и связанными с ней технологиями. В этом месяце мы познакомимся с Виртуальной машиной Java, которая позволяет запускать код Java на множестве различных устройств и в различных программных средах.

rationalisation-machine-fix

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

Байткод Java выполняется на специальном типе микропроцессоров. Это может показаться странным, но во времена первого релиза языка Java, аппаратной реализации этого микропроцессора не существовало. Вместо этого архитектура процессора эмулировалась с помощью так называемой «виртуальной машины«. Виртуальная машина — это эмуляция настоящего процессора Java — машина внутри машины (Рис. 1). Единственная разница заключается в том, что виртуальная машина не запущена внутри ЦПУ — она эмулируется на ЦПУ машины-хоста.

dec99figureone

Рис. 1 — Работа эмулятора JVM на физическом ЦПУ

Виртуальная машина Java отвечает за интерпретацию байткода Java и его трансляцию в команды или обращения к операционной системе. К примеру, запрос на установление соединения с удаленной машиной через сокет требует обращения к ОС. Различные операционные системы работают с сокетами по-разному — но программисту не нужно беспокоиться о таких тонкостях. Обработка этих преобразований — обязанность JVM. Благодаря ей, операционная система и архитектура ЦПУ, с которыми работает ПО Java, совершенно не влияют на разработчика.

dec99figuretwo

Рис. 2 — JVM обрабатывает преобразования

Виртуальная машина Java является частью более крупной системы, Среды исполнения Java (Java Runtime Environment (JRE)). Каждая операционная система и архитектура ЦПУ требуют собственную JRE. JRE состоит из набора базовых классов, реализующих базовый API Java и JVM. Переносимость Java была достигнута, благодаря множеству реализаций JRE для различных ЦПУ и архитектур. Запустить ПО Java в конкретной среде, не имея для нее JRE, невозможно.

Различия между реализациями JVM

Несмотря на то, что реализации Виртуальной машины Java проектируются совместимыми друг с другом, не существует двух абсолютно идентичных JVM. Например, алгоритмы сборки мусора у одной JVM могут отличаться от другой, поэтому узнать, когда конкретно память будет освобождена, невозможно. Алгоритмы планирования потоков у разных JVM тоже отличаются (отчасти завися от операционной системы, в которой они работают), поэтому невозможно точно предсказать, когда будет выполнен тот или иной поток.

У тех, кто только начал изучать язык Java, это может вызывать беспокойство. Однако, в действительности, на практике это практически не отражается на разработке на Java. Очень часто подобные прогнозы делать опасно, поскольку планирование потоков и использование памяти всё равно будут различаться в разных аппаратных средах. Преимущество Java заключается в том, что она не привязана к операционной системе и архитектуре ЦПУ, иначе это бы уменьшило переносимость программ.

Заключение

Виртуальная машина Java предоставляет платформо-независимый способ выполнения кода, благодаря  абстрагированию от различий в операционных системах и архитектурах ЦПУ. Среды разработки Java доступна для множества различных комбинаций аппаратного и программного обеспечения, что делает Java очень переносимым языком. Программисты могут сконцентрировать свои усилия на написании ПО, и им не нужно переживать о том, как или где оно будет запущено. Идея использования виртуальных машин не нова, но на сегодняшний день виртуальная машина Java — самая используемая. Благодаря JVM, мечта о создании программ по принципу «Напиши однажды — запускай везде» (Write Once-Run Anywhere (WORA)) стала реальностью.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>