Направо към съдържанието

Java Virtual Machine

от Уикипедия, свободната енциклопедия
Версия от 13:48, 13 март 2025 на Nk (беседа | приноси) (местя от Java виртуална машина (JVM))

Java Virtual Machine (или JVM) е абстрактна изчислителна машина, която е основният компонент, осигуряващ независимостта от хардуер и операционна система. По аналогия на реалните електронноизчислителни машини има набор от инструкции и мани­пулира области от паметта по време на изпълнение на програмите.[1]

JVM езици

Език за JVM е всеки език, с функционалност, която може да се изрази по отношение на валиден class файл, който може да бъде поставен на Java виртуалната машина. Файл клас съдържа JVM инструкции (Java байт код) и Таблица на знаците, както и друга помощна информация. Форматът на .class файла е хардуер и операционна система от независими двоичен Формат, използван, за да представи съставен класове и интерфейси.[2]

Има множество JVM езици, както старите езици, пренесени на JVM, така и напълно нови езици. JRuby и Jython са може би, най-известните пренесени на JVM, съществуващи езици, съответно Ruby и python. От новите езици, които бяха създадени от нулата, за да се компилират в байт код на java, Clojure, groovy и и Scala може би са най-популярните от тях. Забележителна черта на JVM езиците е, че те са съвместими един с друг, така че, например, Scala библиотека може да се използва с Java-програми и обратно.[3]

Байт-код интерпретатори и JIT (компилатор в реално време)

За всяка хардуерна архитектура различен java интерпретатор е нужен. Когато компютърът има инсталиран java байт код интерпретатор, той може да изпълни всички java байт код програми, и една и съща програма може да работи на всеки компютър, който има такъв преводач.

Когато java байт-код се изпълнява с помощта на интерпретатор, изпълнението винаги ще бъде по-бавно, отколкото на изпълнението на същата програма компилирано в машинен език. Този проблем се решава с JIT (just-in time compilers), като се стартира java-байткод. JIT компилаторът може да преведе байт код на java в машинен език по време на изпълнението на програмата. Преведената част от програмата може да се изпълни много по-бързо, отколкото може да се интерпретира. Тази техника се прилага в тези части от програмата, които често се изпълняват. По този начин, JIT компилаторът може значително да ускори общото време за изпълнение.

Java байт-кода е проектиран да бъде независим от платформата и сигурен.[4] В някои реализации на jvm-машини не включват интерпретатор, а се състоят само от JIT компилатор.[5]

JVM в браузър

Още в началото на процеса на разработка, Java (и jvm) се промотира като уеб-технология за създаване на Rich Internet Applications.

Java-аплети

От страна на клиента, уеб браузърът може да бъде разширен с NPAPI Java plug-in, който изпълнява така наречените java-аплети вградени в HTML страница. Аплета позволява да се рисува в правоъгълна област на страницата, използвайки ограничен набор от API, които позволяват, например, достъп до потребителя микрофон или 3D ускорение. Java-аплетите са били по-добри от JavaScript, както в производителността и функционалността до около 2011 година, когато JavaScript engine в браузърите стават значително по-бързи и HTML 5 набора от уеб технологии, започна разширяването на JavaScript с нови API-та. Java-аплети, не могат да променят страница извън правоъгълна област, което не е вярно за JavaScript.

История

Първият прототип на виртуалната машина е реализиран от Sun Microsystems за преносимо устройство, аналогично на съвременните персонални електронни помощници (PDA). Виртуалната машина е реализирана като интерпретатор на байт код, но може да се реализира да компилира до инструкции на реалния процесор и дори да се изгради хардуерно базирана реализация – силициев микропроцесор, способен да изпълнява байт код.[1]

Виртуалната машина не познава самия език за програмиране Java, а само изпълнява инструкциите на байт-кода, записани като class файлове. Всеки език за програмиране, който може да се компилира до байт-код, може да бъде изпълняван от виртуалната машина.[1]

Източници

  1. а б в Наков, Светлин. Въведение в програмирането с Java. 2017. ISBN 978-954-400-055-4. с. 62-63.
  2. The Java Virtual Machine Specification: Java SE 7 Edition (PDF) // Docs.oracle.com. Посетен на 26 юни 2015.
  3. Frequently Asked Questions – Java Interoperability // Посетен на 18 ноември 2015.
  4. David J. Eck, Introduction to Programming Using Java, Seventh Edition, Version 7.0, August 2014 at Section 1.3 „The Java Virtual Machine“
  5. Oracle JRockit Introduction Архив на оригинала от 2015-09-06 в Wayback Machine. Release R28 at 2.