Programavimas

Kas yra JVM? Pristatome „Java“ virtualią mašiną

„Java Virtual Machine“ yra programa, kurios tikslas yra vykdyti kitas programas. Tai paprasta idėja, kuri taip pat yra vienas iš didžiausių mūsų kodavimo pavyzdžių kung fu. JVM savo laiku sutrikdė status quo ir šiandien toliau remia programavimo naujoves.

Kam naudojamas JVM

JVM turi dvi pagrindines funkcijas: leisti „Java“ programoms veikti bet kuriame įrenginyje ar operacinėje sistemoje (žinomas kaip „Rašyti vieną kartą, paleisti bet kur“ principas) ir valdyti bei optimizuoti programos atmintį. Kai 1995 m. Buvo išleista „Java“, visos kompiuterio programos buvo įrašytos į tam tikrą operacinę sistemą, o programų atmintį tvarkė programinės įrangos kūrėjas. Taigi JVM buvo apreiškimas.

„JavaWorld“ /

Turėti techninę JVM apibrėžtį yra naudinga, taip pat yra kasdienis būdas, kaip programinės įrangos kūrėjai apie tai galvoja. Suskirstykime tuos:

  • Techninis apibrėžimas: JVM yra programinės įrangos, vykdančios kodą ir kuriančio to kodo aplinką, specifikacija.
  • Kasdienis apibrėžimas: JVM yra tai, kaip mes vykdome savo „Java“ programas. Mes sukonfigūruojame JVM nustatymus ir tada pasikliaujame juo valdydami programos išteklius vykdymo metu.

Kai kūrėjai kalba apie JVM, paprastai turime omenyje procesą, vykstantį mašinoje, ypač serveryje, kuris atspindi ir kontroliuoja „Java“ programos išteklių naudojimą. Palyginkite tai su JVM specifikacija, kuriame aprašomi reikalavimai, keliami kuriant šias užduotis atliekančią programą.

Kas kuria ir prižiūri JVM?

JVM yra plačiai naudojamas, intensyviai naudojamas ir prižiūrimas labai ryškių programuotojų, tiek korporatyvinių, tiek atvirojo kodo. „OpenJDK“ projektas yra „Sun Microsystems“ sprendimo dėl atvirojo kodo „Java“ palikuonis. „OpenJDK“ tęsė „Oracle“ valdymą „Java“, o didžiąją dalį šių dienų sunkumų kėlė „Oracle“ inžinieriai.

Atminties valdymas JVM

Dažniausia sąveika su veikiančiu JVM yra patikrinti atminties naudojimą kaupe ir rietuvėje. Dažniausias reguliavimas yra JVM atminties nustatymų derinimas.

Šiukšlių kolekcija

Prieš „Java“ visą programos atmintį tvarkė programuotojas. „Java“ programos atmintį tvarko JVM. JVM valdo atmintį per procesą, vadinamą Šiukšlių kolekcija, kuris nuolat identifikuoja ir pašalina nepanaudotą „Java“ atmintį. Šiukšlių surinkimas vyksta veikiančio JVM viduje.

Pirmosiomis dienomis „Java“ sulaukė daug kritikos dėl to, kad nėra taip „arti metalo“ kaip C ++, taigi ir ne taip greitai. Šiukšlių surinkimo procesas buvo ypač prieštaringas. Nuo to laiko atliekų surinkimui buvo pasiūlyti ir naudojami įvairūs algoritmai ir metodai. Nuosekliai tobulinant ir optimizuojant šiukšlių surinkimas labai pagerėjo.

Ką reiškia „arti metalo“?

Kai programuotojai sako, kad programavimo kalba ar platforma yra „arti metalo“, turime omenyje, kad kūrėjas sugeba programiškai (rašydamas kodą) valdyti operacinės sistemos atmintį. Teoriškai programuotojai gali išgauti daugiau našumo iš mūsų programų, nurodydami, kiek jų sunaudojama ir kada išmesti. Daugeliu atvejų, perduodant atminties valdymą labai rafinuotam procesui, pvz., JVM, gaunamas geresnis našumas ir mažiau klaidų, nei atliekant patiems.

JVM iš trijų dalių

Galima sakyti, kad yra trys JVM aspektai: specifikacija, įgyvendinimas ir egzempliorius. Apsvarstykime kiekvieną iš šių.

1. JVM specifikacija

Pirma, JVM yra programinės įrangos specifikacija. Šiek tiek sukamaisiais būdais JVM specialistas pabrėžia, kad jo įgyvendinimo detalės yra ne apibrėžta specifikacijoje, kad būtų galima maksimaliai kūrybiškai ją realizuoti:

"Norint tinkamai įdiegti" Java "virtualią mašiną, reikia mokėti tik perskaityti klasė failo formatas ir tinkamai atlikite jame nurodytas operacijas. "

J.S. Kartą Bachas panašiai apibūdino muzikos kūrimą:

- Viskas, ką jums reikia padaryti, tai reikiamu metu paliesti reikiamą mygtuką.

Taigi, viskas, ką JVM turi padaryti, yra teisingai paleisti „Java“ programas. Skamba paprastai, iš išorės gali atrodyti net paprastai, tačiau tai yra didžiulė veikla, ypač atsižvelgiant į „Java“ kalbos galią ir lankstumą.

JVM kaip virtuali mašina

JVM yra a Virtuali mašina kuri nešiojamuoju būdu vykdo „Java“ klasės failus. Būdamas virtualia mašina reiškia, kad JVM yra pagrindinės, tikrosios mašinos, pvz., Serverio, kuriame veikia jūsų programa, abstrakcija. Nepaisant to, kokia iš tikrųjų yra operacinė sistema ar aparatinė įranga, JVM sukuria nuspėjamą aplinką, kurioje programos gali veikti. Skirtingai nuo tikros virtualios mašinos, JVM nekuria virtualios operacinės sistemos. Tiksliau būtų apibūdinti JVM kaip a valdoma vykdymo trukmės aplinkaarba a apdoroti virtualią mašiną.

2. JVM įgyvendinimas

Įdiegus JVM specifikaciją gaunama tikroji programinė įranga, kuri yra JVM diegimas. Tiesą sakant, yra daug JVM diegimų, tiek atvirojo kodo, tiek nuosavybės. „OpenJDK“ „HotSpot JVM“ yra informacinis diegimas ir išlieka viena kruopščiausiai išbandytų kodų bazių pasaulyje. „HotSpot“ taip pat yra dažniausiai naudojamas JVM.

Beveik visi licencijuoti JVM yra sukurti kaip „OpenJDK“ ir „HotSpot JVM“ šakės, įskaitant „Oracle“ licencijuotą JDK. Kūrėjus, kuriančius licencijuotą „OpenJDK“ šakutę, dažnai motyvuoja noras pridėti OS skirtų našumo patobulinimų. Paprastai atsisiunčiate ir įdiegiate JVM kaip „Java Runtime Environment“ (JRE) sudėtinę dalį.

3. JVM pavyzdys

Įdiegę ir išleidę „JVM spec“ kaip programinės įrangos produktą, galite jį atsisiųsti ir paleisti kaip programą. Ta atsisiųsta programa yra JVM egzempliorius (arba tiesioginė versija).

Dažniausiai, kai kūrėjai kalba apie „JVM“, mes turime omenyje JVM egzempliorių, veikiantį programinės įrangos kūrimo ar gamybos aplinkoje. Galima sakyti: "Ei, Anandai, kiek atminties užima JVM tame serveryje?" arba: "Aš negaliu patikėti, kad sukūriau žiedinį skambutį, o kamino perpildymo klaida sudužo mano JVM. Kokia naujoko klaida!"

Kas yra programinės įrangos specifikacija?

A programinės įrangos specifikacija (arba spec) yra žmonėms suprantamas projektavimo dokumentas, kuriame aprašoma, kaip turėtų veikti programinės įrangos sistema. Specifikacijos tikslas yra sukurti aiškų aprašą ir reikalavimus inžinieriams koduoti.

Klasių failų įkėlimas ir vykdymas JVM

Mes kalbėjome apie JVM vaidmenį vykdant „Java“ programas, tačiau kaip jis atlieka savo funkciją? Norint paleisti „Java“ programas, JVM priklauso nuo „Java“ klasės krautuvo ir „Java“ vykdymo variklio.

„Java“ klasės krautuvas JVM

„Java“ viskas yra klasė, o visos „Java“ programos sukurtos iš klasių. Paraišką gali sudaryti viena klasė arba tūkstančiai. Kad galėtų paleisti „Java“ programą, JVM turi įkelti sukompiliuotus .class failus į kontekstą, pvz., Serverį, kur juos galima pasiekti. JVM, atlikdamas šią funkciją, priklauso nuo savo klasės krautuvo.

„Java“ klasės krautuvas yra JVM dalis, įkelianti klases į atmintį ir leidžianti jas vykdyti. Klasių krautuvai naudoja tokias technologijas kaip tingus įkėlimas ir talpinimas, kad klasė būtų kuo efektyvesnė. Tai reiškia, kad klasių įkėlimas nėra tas nepaprastas galvosūkis, kuris (tarkim) yra nešiojamojo vykdymo laiko atminties valdymas, todėl metodai yra palyginti paprasti.

Kiekvienoje „Java“ virtualioje mašinoje yra klasės krautuvas. JVM specifikacijoje aprašomi standartiniai metodai, kaip pateikti užklausas ir manipuliuoti klasės krautuvu vykdymo metu, tačiau JVM diegimas yra atsakingas už šių galimybių įgyvendinimą. Kūrėjo požiūriu, pagrindiniai klasės krautuvų mechanizmai paprastai yra juoda dėžutė.

Vykdymo variklis JVM

Kai klasės krautuvas atliks klasių įkėlimo darbą, JVM pradeda vykdyti kiekvienos klasės kodą. vykdymo variklis yra JVM komponentas, tvarkantis šią funkciją. Vykdymo variklis yra būtinas veikiančiam JVM. Tiesą sakant, visais praktiniais tikslais tai yra JVM instancija.

Kodo vykdymas apima prieigos prie sistemos išteklių valdymą. JVM vykdymo variklis yra tarp vykdomos programos - su failų, tinklo ir atminties išteklių reikalavimais - ir operacinės sistemos, kuri tiekia tuos išteklius.

Kaip vykdymo variklis valdo sistemos išteklius

Sistemos išteklius galima suskirstyti į dvi plačias kategorijas: atmintis ir visa kita.

Primename, kad JVM yra atsakingas už nepanaudotos atminties pašalinimą ir kad šiukšlių surinkimas yra mechanizmas, kuris tą šalina. JVM taip pat yra atsakinga už programos paskirstymą ir priežiūrą referencinė struktūra kad kūrėjas laiko savaime suprantamu dalyku. Pavyzdžiui, JVM vykdymo variklis yra atsakingas už kažką panašaus naujas raktinį žodį „Java“, ir paversti jį OS reikalinga atminties paskirstymo užklausa.

Be atminties, vykdymo variklis valdo išteklius failų sistemai pasiekti ir tinklo įvestims / išvestims. Kadangi JVM yra suderinamas su visomis operacinėmis sistemomis, tai nėra jokia užduotis. Be kiekvienos programos išteklių poreikių, vykdymo variklis turi reaguoti į kiekvieną OS aplinką. Taip JVM sugeba patenkinti laukinius reikalavimus.

JVM evoliucija: praeitis, dabartis, ateitis

1995 m. JVM pristatė dvi revoliucingas koncepcijas, kurios nuo to laiko tapo standartine šiuolaikinės programinės įrangos kūrimo kaina: „Rašykite vieną kartą, paleiskite bet kur“ ir automatinį atminties valdymą. Tuo metu programinės įrangos sąveika buvo drąsi koncepcija, tačiau nedaugelis kūrėjų šiandien apie tai gerai pagalvotų. Panašiai, nors mūsų inžinieriai pirmtakai turėjo patys tvarkyti programos atmintį, mano karta užaugo surinkdama šiukšles.

Galėtume sakyti, kad Jamesas Goslingas ir Brendanas Eichas išrado šiuolaikinį programavimą, tačiau tūkstančiai kitų tobulino ir rėmėsi savo idėjomis per ateinančius dešimtmečius. Nors „Java“ virtuali mašina iš pradžių buvo skirta tik „Java“, šiandien ji buvo sukurta palaikyti daugybę scenarijų ir programavimo kalbų, įskaitant „Scala“, „Groovy“ ir „Kotlin“. Žvelgiant į ateitį, sunku įžvelgti ateitį, kai JVM nėra svarbi vystymosi peizažo dalis.

Viskas apie JVM

  • „Java“ iššūkiai: gijų elgesys JVM
  • „Java“ iššūkiai: metodo perkrovimas JVM
  • Viduje JVM našumo optimizavimas
  • „Bytecode“ pagrindai: kaip JVM tvarko baitą
  • „Java“ išimtys: kaip JVM tvarko išimtis
  • Pristatome liesą, vidutinę „Java“ virtualią mašiną

Šią istoriją „Kas yra JVM? Pristatome„ Java “virtualią mašiną“ iš pradžių paskelbė „JavaWorld“.