Что такое виртуальная машина Java и как она работает?
Технологии с объяснениями

Что такое виртуальная машина Java и как она работает?

Хотя для того, чтобы программировать на Java, не обязательно знать, как она работает, это все же полезно знать, потому что это может помочь вам стать лучшим программистом

Виртуальная машина Java Virtual Machine (JVM) – это настоящая находка при программировании на Java. Вопреки названию, виртуальную машину Java можно встретить и в других языках программирования

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

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

Языки высокого уровня

Семантика языка программирования разрабатывается таким образом, чтобы быть близкой к нашему естественному языку, оставаясь при этом лаконичной и легко интерпретируемой для машины. Как вы, вероятно, знаете, язык программирования полностью отличается от машинного кода – набора инструкций, которые компьютер использует для создания и выполнения программы. Это мы называем языками высокого уровня; один или несколько уровней абстракции от машинного кода

Перед тем как запустить программу, код высокого уровня должен быть сначала интерпретирован. Многие программные интерфейсы компилируются заранее (AOT-компиляция) для конкретной платформы. Это делает программу более эффективной во время выполнения, но гораздо менее совместимой с различными платформами.Java, напротив, работает с промежуточным языком под названием Java bytecode и виртуальной машиной Java Virtual Machine

JVM & Java Bytecode

Когда ваш Java-проект собирается, он транслирует исходный код (содержащийся в исходных файлах *.java) в байткод Java (чаще всего содержащийся в файлах *.class). Это делает ваш высокоуровневый код на один шаг ближе к машинному коду, но еще не совсем к нему. Этот байткод представляет собой набор компактных инструкций; его легче интерпретировать машине, но он менее читабелен

Когда вы запускаете Java-приложение на своем компьютере, мобильном телефоне или любой другой платформе с поддержкой Java, вы передаете этот байткод Java виртуальной машине Java. Интерпретатор в виртуальной машине Java обычно начинает компилировать весь байткод во время выполнения, следуя принципам так называемой компиляции ‘точно в срок’. Это приводит к типичной, хотя часто и небольшой задержке при открытии Java-приложения, но в целом повышает производительность программы по сравнению с интерпретируемой компиляцией

Основным преимуществом этой системы является повышенная совместимость. Поскольку ваши приложения выполняются в виртуальной машине, а не непосредственно на аппаратном обеспечении, разработчик может один раз запрограммировать и создать свое приложение, которое затем может быть выполнено на любом устройстве с реализацией виртуальной машины Java. Этот принцип породил лозунг Java: ‘Напиши один раз, запусти везде’

Плюсы: Совместимость и повышенная безопасность

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

Против: Различные реализации JVM и отладка

Одно из основных критических замечаний, высказанных в адрес совместимости кода и виртуальной машины Java, связано с большим количеством различных реализаций последней. Видите ли, виртуальная машина Java – это не единое программное обеспечение.Oracle, владельцы Java, имеют свою реализацию виртуальной машины Java, но другие люди могут сделать свою, если она удовлетворяет различным практическим и контрактным требованиям

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

Есть ли у вас опыт работы с виртуальной машиной Java?  Если да, то есть ли что-то, что я упустил, что следовало бы упомянуть?

Image Credit: Michaelaw, Dcoetzee

Об авторе

Алексей Белоусов

Привет, меня зовут Филипп. Я фрилансер энтузиаст . В свободное время занимаюсь переводом статей и пишу о потребительских технологиях для широкого круга изданий , не переставая питать большую страсть ко всему мобильному =)

Комментировать

Оставить комментарий

ВАМ БУДЕТ ИНТЕРЕСНО