мини|400x400px|Преглед Јава виртуелне машине (ЈВМ) је архитектура заснована на спецификацији Јава виртуелне машине Јаве СЕ 7 издања Јава виртуелна машина (ЈВМ) је апстрактна рачунарска машина која омогућава рачунање рачунару за покретање Јава програма. Постоје три представе о ЈВМ: спецификација, имплементација и инстанца. Спецификација је документ који формално описује шта је потребно од имплементације ЈВМ. Имајући једну спецификацију обезбеђено је да су све имплементације интероперабилне. Имплементација ЈВМ је компјутерски програм који задовољава захтеве ЈВМ спецификације. Инстанца ЈВМ је имплементација рада у процесу који извршава компјутерски програм преведен у Јава бајт кодове.

Ораклеј корпорација, која је власник заштитног знака Јава, дистрибуира Јава виртуелну машину за имплементацију ХотСпота заједно са имплементацијом класе Јава библиотеке под називом Јава Рантајм Енвиронмент (ЈРЕ).

ЈВМ спецификације Јава виртуелна машина је апстрактни (виртуелни) рачунар који се дефинише спецификацијом. Спецификација изоставља детаље имплементације који нису неопходни за обезбеђивање интероперабилности. На пример, распоред меморије на подручјима података Ран-тајм, алгоритам користи ђубретар-колекцију, и интерна оптимизација виртуелне машине инструкцијама Јаве (њихово превођење у машински код). Главни разлог овог пропуста је да није непотребно ограничавати имплементаторе. Свака Јава апликација се може покренути само унутар неке конкретне примене апстрактне спецификације Јава виртуелне машине.Bill Venners, Inside the Java Virtual Machine Chapter 5

Почевши од Јава платформе, стандардног издања (Ј2СЕ) 5.0, промене у спецификацији ЈВМ су развијени у процесу Јава заједнице као ЈСР 924."The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 924". Од 2006. године, промене у спецификацији подржане предложеним изменама у формату класа датотеке (ЈСР 202)"The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 202".  се врше као одржавање ослобађања ЈСР 924. Спецификација ЈВМ је објављена као плава књига,The Java Virtual Machine Specification (the first and second editions are also available online). Предговор стања:

Један од Ораклеј ЈВМ се зове ХотСпот, с друге стране, је наслеђен од БЕА система је ЈРокит. Чишћење собе Јава имплементације укључује Кафе и IBM Ј9. Ораклеј поседује заштитни знак Јаве, а може и дозволити њено коришћење да потврди имплементацију делова као потпуно компатибилних са Ораклеј спецификацијом .

Класа пуњач Једна од организационих заједница ЈВМ бајткодова је класа. Имплементација платформе класе мора да препозна и учита све што је у складу са форматом Јава класе датотеке. Било која имплементација је слободна да препозна друге бинарне облике, поред класе фајлова, али мора да препозна класни фајл.

Класа платформе обавља три основне строге радње : Пуњење: проналази и увози бинарне податке за одређени тип Повезивање: врши проверу, припрему и (опционално) резолуцију Провера: осигурава исправност увезених врста Припрема: додељује меморију класи променљивих и покреће меморију до фабричких вредности Резолуција: претвара симболичке референце типа на директне референце.

Иницијализација: позива Јава код који покреће класе променљивих на њихове одговарајуће почетне вредности. У принципу, постоје две врсте класа пуњења: бутстреп класа пуњења и корисничке дефинисане класе пуњења.

Сваки имплементација Јава виртуелне машине мора имати класе пуњења бутстрепова, способних за утовар вероване класе. Спецификација Јава виртуелна машина не прецизира колико платформи класа треба лоцирати класе.

Инструкције бајт кодова ЈВМ има инструкције за следеће групе задатака:

Циљ је бинарна компатибилност. Сваки посебни домаћин оперативног система треба да има властито спровођење ЈВМ и рантиме. Ове ЈВМ тумаче бајт кодове семантички на исти начин, али стварна реализација може бити другачија. Сложенији се угледају бајт кодове се компатибилношћу и ефикасно спроводе Јава језгро АПИ који се мора мапирати сваки главни оперативни систем.

ЈВМ језици +

Верзије не-ЈВМ језикаЈезикНа ЈВМЕрлангЕрјангЈаваСкриптРиноПаскалСлободан ПаскалPHPКверкусПајтонЈајтонРЕXНетРексРубиЈРубиШЕМА КаваТцлЈекл+Језици дизајнирани специјално за ЈВМ ЈезициЈава ББјБинШелЦејлорClojureФантомКотлинГрувиМИДлет ПаскалСкалаXтенд ЈВМ језик је било који језик са функционалношћу која се може изразити у смислу важећег фајла класе који може бити домаћин Јава виртуелној машини. Класа датотека садржи Јава виртуелна машина и упутства (или бајт кодове) и табелу симбола, као и остале пратеће информације. Формат класе фајл је опремљености и оперативни систем независан бинарног формата користи се за представљање састављања класе и интерфејса."The Java Virtual Machine Specification : Java SE 7 Edition" (PDF). Java 7 ЈВМ имплементира ЈСР 292: подржањем динамичног типа језика "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 292".  на Јава платформи, нова функција која подржава динамички откуцан језик у ЈВМ. Ова функција је развијена у оквиру пројекта Да Винчијеве машине чија је мисија да продужи ЈВМ тако да она подржава и друге језике осим Јава."Da Vinci Machine Project". "New JDK 7 Feature: Support for Dynamically Typed Languages in the Java Virtual Machine".

Бајткод верификатор Основна филозофија Јаве је да је инхерентно обезбеди становишта да ниједан корисник програма не може да сруши домаћин машину или на други начин неадекватно омета са другим операцијама на домаћин машинама, и да је могуће да заштити одређене методе и структуре података који припадају коду поверења из приступа или корупције од стране непознатог кода који се извршава у истој ЈВМ. Поред тога, заједничке програмерске грешке које су често довели до корупције података или непредвидивих понашања, као што је приступ ван крај низа или коришћење неиницијализованог показивача није дозвољено да се деси. Неколико карактеристика Јава комбинују да обезбеди ову сигурност, укључујући класе модела, гомиле ђубрета-прикупљени и верификатора.

ЈВМ верификује све бајткодове пре него што је уништен. Ова верификација се састоји углавном из три врсте провера: Гране су увек важеће локације Подаци се увек иницијализују и референце су увек сигуран тип Приступ приватним или пакет приватним подацима метода је строго контролисан

Прве два од ових провера се одвијају првенствено током корака верификације који се јавља када се класа учита и створи право коришћења. Трећи се пре свега обавља динамички, када се створе податаци или методе класе прво приступи другим класама.

Верификатор дозвољава само неке секвенце бајткодова у важећим програмима, нпр скок (грана) упутство може циљати инструкцију у исту методу. Осим тога, верификатор осигурава да свако дато упутство ради на фиксној локацији складиштења,"The Verification process".  омогућавајући ЈИТ преводиоцу трансформацију складиштења приступа у регистру основних приступа. Због тога, ЈВМ је гомила архитектура и не подразумева брзину казну за опонашање на архитектури регистра заснованог када се користи ЈИТ преводилац. У бази провереног кода ЈВМ архитектуре, нема разлике у ЈИТ преводиоцу да ли добија по имену имагинарне регистре или имагинарне позиције складиштења које морају бити распоређене на регистрима циљне екипе архитектуре. У ствари, код верификације чини ЈВМ и разликује га од класичних складиштења архитектура, од којих је ефикасна емулација са ЈИТ преводиоцем компликованија и обично обавља спорије превод.

Оригинална спецификација верификатора бајт кода користи природни језик који је непотпун или нетачан у неким аспектима. Један број покушаја је учињен да се одреди ЈВМ као формални систем. На овај начин, сигурност тренутних имплементација ЈВМ може детаљније да се анализира, а потенцијални безбедносни подвизи су спречени. Такође могуће да се оптимизира ЈВМ прескачући непотребне безбедносне провере, ако је доказано да је апликација безбедна .Stephen N. Freund and John C. Mitchell. 1999.

Сигурно извршење далеког кода Виртуелне машине архитектуре омогућававају веома фину контролу над акцијама које код у машини је дозвољен. Ово је дизајнирно да омогући безбедно извршавање кода непоузданих удаљених извора, модел који користе Јава програмчићи. Програмчићи покренути у року ВМ искорпорирани у бровсеру корисника, извршавају преузети кода са удаљеног ХТТП сервера. Даљински код ради у ограниченом кутијом са песком, која је дизајнирна да заштити корисника од злих или злонамерних кодова. Издавачи могу купити потврду за дигитално потписивање програмчића, дајући им дозволу да затражи од корисника да се пробије из кутије с песком и приступи локалним системима датотека, остави, и изврши спољашње делове софтвера или мреже.

Бајт код тумач и истовремено преводилац За сваку архитектуру хардвера је потребан другачији Јава бајт код интерпретатор. Када рачунар има Јава бајт код преводиоца, може покренути било који Јава бајт код програм, а исти програм се може покренути на било ком рачунару који има таквог преводиоца.

Јава бајт код треба да буде независна и безбедна платформа.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 Release R28 at 2.

ЈВМ у веб бровсерима Од раних фазама процеса пројектовања Јаве (и ЈВМ) она је продавана као веб технологије за креирање богатих интернет апликација.

Јава програмчићи На страни клијента, веб претраживачи могу бити продужени са НПАПИ Јава утикачима које извршава тзв. Јава програмчић у ХТМЛ. Програмчићу је дозвољено да увуче правоугаони крај на страницу додељену њему и користити ограничен скуп АПИ-ја који омогућавају на пример приступ микрофон корисника или 3Д убрзање. Јава програмчићи су супериорнији у односу на ЈаваСкрипт како у перформансима од 2011. године, када су знатно брже направљени ЈаваСкрипт мотори у претраживачима и ХТМЛ 5 пакет веб технологија почела са унапређивањем ЈаваСкрипт са новим АПИ. Јава програмчићи нису у могућности да измене страну изван његових правоугаоних крајева што није тачно о ЈаваСкрипт Адоб Флеш Плејер, главни такмичар технологије, ради на исти начин у том погледу. Јава програмчићи нису ограничени за Јава и уопште могу бити креирани у било ком ЈВМ језику.

У јуну 2015, према В3Технологији, употреба Јава програмчића је пала на 0,1% свих веб сајтова. Флеш је пао на 10,8% и Силверлајт на 0,1% веб сајтова."Historical yearly trends in the usage of client-side programming languages, June 2015".

ЈаваСкрипт ЈВМ и преводиоци ЈВМ имплементација у ЈаваСцрипт не постоје, али су углавном ограничени на хоби пројекте неподесне за распоређивање производње или развојних алата да се избегне сваки пут када инвеститор жели да прегледате направљене промене.

Компилација ЈаваСкрипта Са континуираним побољшањима у брзини ЈаваСкрипт извршења, у комбинацији са повећаном употребом мобилних уређаја чији веб претраживачи не спроводе подршку за додатке, постоје напори који циљају на оне кориснике кроз компилацију за ЈаваСкрипт. Могуће је било и саставити изворни код или ЈВМ бајт код на ЈаваСкрипту. Израда ЈВМ бајт кодва који су универзални за ЈВМ језика омогућава изградњу на постојећим бајт кодовима преводилац.

Главни ЈБМ бајт код ЈаваСкрипт преводиоца јеТеаВм,"TeaVM project home page". преводилац садржан у Драгом веб СДК"Dragome Web SDK". Бцк2Брвср,"Bck2Brwsr - APIDesign". и ј2јс-преводилац.Wolfgang Kuehn (decatur). j2js-compiler GitHub

Водећи преводиоци ЈВМ језика у ЈаваСкрипту укључују да ЈаваСкрипт преводилац буде садржан у Гугл веб тулкитут, Clojure скрипти (Clojure), ГруСкрипти (Груви), Скала.јс (Скала) и други."List of languages that compile to JS · jashkenas/coffeescript Wiki · GitHub".

Јава Рантајм Енвиронмент Ораклеј