Java виртуелна машина
Јава виртуелна машина (ЈВМ) је апстрактна рачунарска машина која омогућава рачунање рачунару за покретање Јава програма. Постоје три представе о ЈВМ: спецификација, имплементација и инстанца. Спецификација је документ који формално описује шта је потребно од имплементације ЈВМ. Имајући једну спецификацију обезбеђено је да су све имплементације интероперабилне. Имплементација ЈВМ је компјутерски програм који задовољава захтеве ЈВМ спецификације. Инстанца ЈВМ је имплементација рада у процесу који извршава компјутерски програм преведен у Јава бајт кодове.
Ораклеј корпорација, која је власник заштитног знака Јава, дистрибуира Јава виртуелну машину за имплементацију ХотСпота заједно са имплементацијом класе Јава библиотеке под називом Јава Рантајм Енвиронмент (ЈРЕ).
Извршење програма |
---|
Опште теме |
Специфична дужина трајања |
|
ЈВМ спецификације
[уреди | уреди извор]Јава виртуелна машина је апстрактни (виртуелни) рачунар који се дефинише спецификацијом. Спецификација изоставља детаље имплементације који нису неопходни за обезбеђивање интероперабилности. На пример, распоред меморије на подручјима података Ран-тајм, алгоритам користи ђубретар-колекцију, и интерна оптимизација виртуелне машине инструкцијама Јаве (њихово превођење у машински код). Главни разлог овог пропуста је да није непотребно ограничавати имплементаторе. Свака Јава апликација се може покренути само унутар неке конкретне примене апстрактне спецификације Јава виртуелне машине.[1]
Почевши од Јава платформе, стандардног издања (Ј2СЕ) 5.0, промене у спецификацији ЈВМ су развијени у процесу Јава заједнице као ЈСР 924.[2]Од 2006. године, промене у спецификацији подржане предложеним изменама у формату класа датотеке (ЈСР 202)[3] се врше као одржавање ослобађања ЈСР 924. Спецификација ЈВМ је објављена као плава књига,[4] Предговор стања:
Један од Ораклеј ЈВМ се зове ХотСпот, с друге стране, је наслеђен од БЕА система је ЈРокит. Чишћење собе Јава имплементације укључује Кафе и IBM Ј9. Ораклеј поседује заштитни знак Јаве, а може и дозволити њено коришћење да потврди имплементацију делова као потпуно компатибилних са Ораклеј спецификацијом .
Класа пуњач
[уреди | уреди извор]Једна од организационих заједница ЈВМ бајткодова је класа. Имплементација платформе класе мора да препозна и учита све што је у складу са форматом Јава класе датотеке. Било која имплементација је слободна да препозна друге бинарне облике, поред класе фајлова, али мора да препозна класни фајл.
Класа платформе обавља три основне строге радње :
- Пуњење: проналази и увози бинарне податке за одређени тип
- Повезивање: врши проверу, припрему и (опционално) резолуцију
- Провера: осигурава исправност увезених врста
- Припрема: додељује меморију класи променљивих и покреће меморију до фабричких вредности
- Резолуција: претвара симболичке референце типа на директне референце.
- Иницијализација: позива Јава код који покреће класе променљивих на њихове одговарајуће почетне вредности.
У принципу, постоје две врсте класа пуњења: бутстреп класа пуњења и корисничке дефинисане класе пуњења.
Сваки имплементација Јава виртуелне машине мора имати класе пуњења бутстрепова, способних за утовар вероване класе. Спецификација Јава виртуелна машина не прецизира колико платформи класа треба лоцирати класе.
Инструкције бајт кодова
[уреди | уреди извор]ЈВМ има инструкције за следеће групе задатака:
Циљ је бинарна компатибилност. Сваки посебни домаћин оперативног система треба да има властито спровођење ЈВМ и рантиме. Ове ЈВМ тумаче бајт кодове семантички на исти начин, али стварна реализација може бити другачија. Сложенији се угледају бајт кодове се компатибилношћу и ефикасно спроводе Јава језгро АПИ који се мора мапирати сваки главни оперативни систем.
ЈВМ језици
[уреди | уреди извор]
|
|
ЈВМ језик је било који језик са функционалношћу која се може изразити у смислу важећег фајла класе који може бити домаћин Јава виртуелној машини. Класа датотека садржи Јава виртуелна машина и упутства (или бајт кодове) и табелу симбола, као и остале пратеће информације. Формат класе фајл је опремљености и оперативни систем независан бинарног формата користи се за представљање састављања класе и интерфејса.[5] Java 7 ЈВМ имплементира ЈСР 292: подржањем динамичног типа језика [6] на Јава платформи, нова функција која подржава динамички откуцан језик у ЈВМ. Ова функција је развијена у оквиру пројекта Да Винчијеве машине чија је мисија да продужи ЈВМ тако да она подржава и друге језике осим Јава.[7][8]
Бајткод верификатор
[уреди | уреди извор]Основна филозофија Јаве је да је инхерентно обезбеди становишта да ниједан корисник програма не може да сруши домаћин машину или на други начин неадекватно омета са другим операцијама на домаћин машинама, и да је могуће да заштити одређене методе и структуре података који припадају коду поверења из приступа или корупције од стране непознатог кода који се извршава у истој ЈВМ. Поред тога, заједничке програмерске грешке које су често довели до корупције података или непредвидивих понашања, као што је приступ ван крај низа или коришћење неиницијализованог показивача није дозвољено да се деси. Неколико карактеристика Јава комбинују да обезбеди ову сигурност, укључујући класе модела, гомиле ђубрета-прикупљени и верификатора.
ЈВМ верификује све бајткодове пре него што је уништен. Ова верификација се састоји углавном из три врсте провера:
- Гране су увек важеће локације
- Подаци се увек иницијализују и референце су увек сигуран тип
- Приступ приватним или пакет приватним подацима метода је строго контролисан
Прве два од ових провера се одвијају првенствено током корака верификације који се јавља када се класа учита и створи право коришћења. Трећи се пре свега обавља динамички, када се створе податаци или методе класе прво приступи другим класама.
Верификатор дозвољава само неке секвенце бајткодова у важећим програмима, нпр скок (грана) упутство може циљати инструкцију у исту методу. Осим тога, верификатор осигурава да свако дато упутство ради на фиксној локацији складиштења,[9] омогућавајући ЈИТ преводиоцу трансформацију складиштења приступа у регистру основних приступа. Због тога, ЈВМ је гомила архитектура и не подразумева брзину казну за опонашање на архитектури регистра заснованог када се користи ЈИТ преводилац. У бази провереног кода ЈВМ архитектуре, нема разлике у ЈИТ преводиоцу да ли добија по имену имагинарне регистре или имагинарне позиције складиштења које морају бити распоређене на регистрима циљне екипе архитектуре. У ствари, код верификације чини ЈВМ и разликује га од класичних складиштења архитектура, од којих је ефикасна емулација са ЈИТ преводиоцем компликованија и обично обавља спорије превод.
Оригинална спецификација верификатора бајт кода користи природни језик који је непотпун или нетачан у неким аспектима. Један број покушаја је учињен да се одреди ЈВМ као формални систем. На овај начин, сигурност тренутних имплементација ЈВМ може детаљније да се анализира, а потенцијални безбедносни подвизи су спречени. Такође могуће да се оптимизира ЈВМ прескачући непотребне безбедносне провере, ако је доказано да је апликација безбедна .[10]
Сигурно извршење далеког кода
[уреди | уреди извор]Виртуелне машине архитектуре омогућававају веома фину контролу над акцијама које код у машини је дозвољен. Ово је дизајнирно да омогући безбедно извршавање кода непоузданих удаљених извора, модел који користе Јава програмчићи. Програмчићи покренути у року ВМ искорпорирани у бровсеру корисника, извршавају преузети кода са удаљеног ХТТП сервера. Даљински код ради у ограниченом кутијом са песком, која је дизајнирна да заштити корисника од злих или злонамерних кодова. Издавачи могу купити потврду за дигитално потписивање програмчића, дајући им дозволу да затражи од корисника да се пробије из кутије с песком и приступи локалним системима датотека, остави, и изврши спољашње делове софтвера или мреже.
Бајт код тумач и истовремено преводилац
[уреди | уреди извор]За сваку архитектуру хардвера је потребан другачији Јава бајт код интерпретатор. Када рачунар има Јава бајт код преводиоца, може покренути било који Јава бајт код програм, а исти програм се може покренути на било ком рачунару који има таквог преводиоца.
Јава бајт код треба да буде независна и безбедна платформа.[11] Неке имплементације ЈВМ не укључују преводиоца, али се састоје из само истовремених тумача.[12]
ЈВМ у веб бровсерима
[уреди | уреди извор]Од раних фазама процеса пројектовања Јаве (и ЈВМ) она је продавана као веб технологије за креирање богатих интернет апликација.
Јава програмчићи
[уреди | уреди извор]На страни клијента, веб претраживачи могу бити продужени са НПАПИ Јава утикачима које извршава тзв. Јава програмчић у ХТМЛ. Програмчићу је дозвољено да увуче правоугаони крај на страницу додељену њему и користити ограничен скуп АПИ-ја који омогућавају на пример приступ микрофон корисника или 3Д убрзање. Јава програмчићи су супериорнији у односу на ЈаваСкрипт како у перформансима од 2011. године, када су знатно брже направљени ЈаваСкрипт мотори у претраживачима и ХТМЛ 5 пакет веб технологија почела са унапређивањем ЈаваСкрипт са новим АПИ. Јава програмчићи нису у могућности да измене страну изван његових правоугаоних крајева што није тачно о ЈаваСкрипт Адоб Флеш Плејер, главни такмичар технологије, ради на исти начин у том погледу. Јава програмчићи нису ограничени за Јава и уопште могу бити креирани у било ком ЈВМ језику.
У јуну 2015, према В3Технологији, употреба Јава програмчића је пала на 0,1% свих веб сајтова. Флеш је пао на 10,8% и Силверлајт на 0,1% веб сајтова.[13]
ЈаваСкрипт ЈВМ и преводиоци
[уреди | уреди извор]ЈВМ имплементација у ЈаваСцрипт не постоје, али су углавном ограничени на хоби пројекте неподесне за распоређивање производње или развојних алата да се избегне сваки пут када инвеститор жели да прегледате направљене промене.
Компилација ЈаваСкрипта
[уреди | уреди извор]Са континуираним побољшањима у брзини ЈаваСкрипт извршења, у комбинацији са повећаном употребом мобилних уређаја чији веб претраживачи не спроводе подршку за додатке, постоје напори који циљају на оне кориснике кроз компилацију за ЈаваСкрипт. Могуће је било и саставити изворни код или ЈВМ бајт код на ЈаваСкрипту. Израда ЈВМ бајт кодва који су универзални за ЈВМ језика омогућава изградњу на постојећим бајт кодовима преводилац.
Главни ЈБМ бајт код ЈаваСкрипт преводиоца јеТеаВм,[14] преводилац садржан у Драгом веб СДК[15] Бцк2Брвср,[16] и ј2јс-преводилац.[17]
Водећи преводиоци ЈВМ језика у ЈаваСкрипту укључују да ЈаваСкрипт преводилац буде садржан у Гугл веб тулкитут, Clojure скрипти (Clojure), ГруСкрипти (Груви), Скала.јс (Скала) и други.[18]
Јава Рантајм Енвиронмент Ораклеј
[уреди | уреди извор]Јава рантајм енвиронмент (ЈРЕ) је објавила Ораклеј дистрибуција софтвера која садржи самосталан Јава ВМ (Хотспот), бровсер плугин, стандардне Јава библиотеке и алатку за конфигурацију. То је најчешћи Јава окружење инсталирано на виндоус рачунарима. То је слободно доступно за преузимање на сајту јава.цом.
Особине
[уреди | уреди извор]Спецификација ЈВМ даје много простора имплементаторима у вези детаља имплементације. Од Јава 1.3, ЈРЕ до Ораклеја садржи ЈВМ под називом ХотСпот. Он је дизајниран да буде ЈВМ високих перформанси.
За убрзано извршавање кода, ХотСпот се ослања на истовремену компилацију. Да би се убрзала алокацију објекта и одвоз смећа, ХотСпот користи генерацијске гомиле.
Генерацијске гомиле
[уреди | уреди извор]Гомила виртуелна Јава машине је подручје меморије коју користи ЈВМ за управљање меморијом.[19]
У ХотСпот гомиле су подељене на генерације:
- Млада генерација складишти краткотрајне објекте који су креирани и одмах прикупља смеће.
- Објекти који и даље постоје више су се преселили у старије генерације (такође познате и као редовне генерације). Ова меморија је подељен у два простора где се чувају предмети који су преживели прве и наредне колекције за смеће.
Стална генерација (или пермген) је коришћена за дефиниције класе и повезивала метаподатке пре Јаве 8. Стална генерација није био део гомиле.[20][21] Стална генерација је уклоњена из Јаве 8.[22]
Првобитно је била стална генерација, а предмети и клаце су заједно чувани у истој области. Али, како се класа истовара јавља много ређе него што су предмети сакупљени, креће класа структура у одређеној области дозвољеној за значајна побољшања перформанса.[20]
Безведност
[уреди | уреди извор]Ораклејев ЈРЕ је инсталиран на великом броју рачунара. Пошто сваку веб страницу корисник може покренути страницу Јава програмчића. Јава обезбеђује лако доступан напад на површину злонамерним сајтовима које корисник посећује. Касперски Лабс наводи да је Јава веб бровсер плугин метода избора компјутерских криминалаца. Јава подвизи су укључени у многим користима пакета које хакери распоређују на хакованим сајтовима.[23]
У прошлости, последњи корисници су често користили застарелу верзију ЈРЕ која је рањива на многим познатим нападима. То је довело до широког заједничког уверења међу корисницима да је Јава инхерентно несигурна.[24] Од Јава 1.7, Ораклеј ЈРЕ за виндоус укључује аутоматску функционалност ажурирања.
Тулбаров спор
[уреди | уреди извор]Почев од 2005. године, Сан (сада Ораклеј) ЈРЕ укључења се не односе на подразумевано инсталиране софтвер. У почетку је то било Гугл тулбар, касније МСН тулбар, Јаху тулбар и на крају Аск тулбар. АСК Тулбар показује да је посебно контроверзан. Било је и петицију тражених Ораклеја да га уклоне. Потписници су изразили своје уверење да Ораклеј "крши поверење стотине милиона корисника који воде Јаву на својим машинама. Они су искаљали углед некада поносној платформи.".[25] Зднет назива њихово понашање варљивим, јер је инсталатер наставио да нуди алатке током сваког ажурирања, чак и након што је корисник претходно одбио да га инсталира, повећавајући шансе на траци са алаткама да се инсталира када би корисник био превише заузет или растројен.[26]
У јуну 2015, Ораклеј је објавио да је завршио своје партнерство са Аск.цом у корист са Јахуом!, где ће корисници бити, и затражио је да промени своју почетну страну и ставе као подразумевани претраживач Јаху. [27]
Види још
[уреди | уреди извор]- Листа Јава виртуелних машина
- Поређење Јава виртуелних машина
- Поређење апликација виртуелних машина
- Аутоматски изузетак руковања
- Јава перформанси
- Листа ЈВМ јез
- Јава процесо
- ЦЛР
Референце
[уреди | уреди извор]- ^ Bill Venners, Inside the Java Virtual Machine Chapter 5
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 924".
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 202".
- ^ The Java Virtual Machine Specification (the first and second editions are also available online).
- ^ "The Java Virtual Machine Specification : Java SE 7 Edition" (PDF).
- ^ "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 Архивирано на сајту Wayback Machine (6. септембар 2015) Release R28 at 2.
- ^ "Historical yearly trends in the usage of client-side programming languages, June 2015".
- ^ "TeaVM project home page".
- ^ "Dragome Web SDK".
- ^ "Bck2Brwsr - APIDesign".
- ^ Wolfgang Kuehn (decatur). j2js-compiler GitHub
- ^ "List of languages that compile to JS · jashkenas/coffeescript Wiki · GitHub".
- ^ "Frequently Asked Questions about Garbage Collection in the Hotspot Java Virtual Machine".
- ^ а б Masamitsu, Jon (28 November 2006).
- ^ Nutter, Charles (11 September 2008).
- ^ "JEP 122: Remove the Permanent Generation".
- ^ "Is there any protection against Java exploits? Архивирано на сајту Wayback Machine (4. март 2016)
- ^ "What Is Java, Is It Insecure, and Should I Use It?" Архивирано на сајту Wayback Machine (8. новембар 2015).
- ^ "Petition to Unbundle Ask Bar from Java".
- ^ Bott, Ed (2013-01-22).
- ^ "Yahoo Tries to Hook Search Users Via Java Updates".
Литература
[уреди | уреди извор]- Clarifications and Amendments to the Java Virtual Machine Specification, Second Edition includes list of changes to be made to support J2SE 5.0 and JSR 45
- JSR 45, specifies changes to the class file format to support source-level debugging of languages such as JavaServer Pages (JSP) and SQLJ that are translated to Java