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

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

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

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

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

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

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

JVM Байт-код Java

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

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

виртуальная машина Java

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

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

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

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

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

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

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

Изображение предоставлено: Michaelaw, Dcoetzee

Ссылка на основную публикацию
Adblock
detector