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