Ohjelmointi

Mikä on JVM? Esittelyssä Java-virtuaalikone

Java Virtual Machine on ohjelma, jonka tarkoituksena on suorittaa muita ohjelmia. Se on yksinkertainen idea, joka on myös yksi suurimmista esimerkkeistämme koodauksesta kung fu. JVM järkytti aikansa nykytilaa ja tukee edelleen ohjelmointiinnovaatioita.

Mihin JVM: ää käytetään

JVM: llä on kaksi ensisijaista toimintoa: sallia Java-ohjelmien ajaa millä tahansa laitteella tai käyttöjärjestelmällä (tunnetaan nimellä "Kirjoita kerran, suorita missä tahansa" -periaate), ja hallita ja optimoida ohjelmamuistia. Kun Java julkaistiin vuonna 1995, kaikki tietokoneohjelmat kirjoitettiin tiettyyn käyttöjärjestelmään, ja ohjelmistokehittäjä hallinnoi ohjelmamuistia. Joten JVM oli ilmoitus.

JavaWorld /

JVM: n teknisen määritelmän käyttäminen on hyödyllistä, ja ohjelmistokehittäjillä on myös jokapäiväinen tapa ajatella sitä. Hajotetaan ne:

  • Tekninen määritelmä: JVM on erittely ohjelmistolle, joka suorittaa koodin ja tarjoaa ajonaikaisen ympäristön kyseiselle koodille.
  • Jokapäiväinen määritelmä: JVM käyttää Java-ohjelmiamme. Määritämme JVM: n asetukset ja luotamme siihen, että hallitsemme ohjelman resursseja suorituksen aikana.

Kun kehittäjät puhuvat JVM: stä, tarkoitamme yleensä koneella, erityisesti palvelimella, käynnissä olevaa prosessia, joka edustaa ja ohjaa Java-sovelluksen resurssien käyttöä. Kontrasti tämä JVM-määrittely, joka kuvaa nämä tehtävät suorittavan ohjelman rakentamisen vaatimukset.

Kuka kehittää ja ylläpitää JVM: ää?

JVM on laajasti käytössä, voimakkaasti käytetty ja ylläpitämässä erittäin kirkkaita ohjelmoijia, sekä yritys- että avoimen lähdekoodin. OpenJDK-projekti on Sun Microsystemsin avoimen lähdekoodin Java-päätöksen jälkeläinen. OpenJDK on jatkanut Oraclen Java-hallinnon kautta, ja suurimman osan raskaasta nostosta ovat nykyään suorittaneet Oracle-insinöörit.

Muistin hallinta JVM: ssä

Yleisin vuorovaikutus käynnissä olevan JVM: n kanssa on tarkistaa kasan ja pinon muistin käyttö. Yleisin säätö on JVM: n muistiasetusten virittäminen.

Roskakokoelma

Ennen Java-ohjelmoijaa hallinnoi koko ohjelmamuistia. Java-ohjelmassa ohjelmamuistia hallinnoi JVM. JVM hallitsee muistia kutsutulla prosessilla Roskakokoelma, joka tunnistaa ja poistaa jatkuvasti käyttämätöntä muistia Java-ohjelmissa. Jätteiden keräys tapahtuu käynnissä olevan JVM: n sisällä.

Alkuvuosina Java sai paljon kritiikkiä siitä, ettei se ollut "lähellä metallia" kuin C ++, eikä siis niin nopeasti. Jätteiden keräysprosessi oli erityisen kiistanalainen. Siitä lähtien roskien keräykseen on ehdotettu ja käytetty erilaisia ​​algoritmeja ja lähestymistapoja. Jatkuvan kehityksen ja optimoinnin avulla roskien keräys on parantunut huomattavasti.

Mitä tarkoittaa "lähellä metallia"?

Kun ohjelmoijat sanovat, että ohjelmointikieli tai -alusta on "lähellä metallia", tarkoitamme, että kehittäjä pystyy ohjelmallisesti (kirjoittamalla koodia) hallitsemaan käyttöjärjestelmän muistia. Teoriassa ohjelmoijat voivat vääntää enemmän suorituskykyä ohjelmistamme määrittelemällä, kuinka paljon käytetään ja milloin hävittää. Useimmissa tapauksissa muistinhallinnan delegoiminen erittäin hienostuneeseen prosessiin, kuten JVM, tuottaa paremman suorituskyvyn ja vähemmän virheitä kuin itse tekeminen.

JVM kolmessa osassa

Voidaan sanoa, että JVM: llä on kolme näkökohtaa: määrittely, toteutus ja instanssi. Tarkastellaan kaikkia näitä.

1. JVM-eritelmä

Ensinnäkin JVM on ohjelmistomääritys. Hieman kiertävällä tavalla JVM-asiantuntija korostaa, että sen toteuttamisen yksityiskohdat ovat ei määritelty spesifikaatiossa, jotta mahdollistettaisiin maksimaalinen luovuus sen toteuttamisessa:

"Jotta Java - virtuaalikone voidaan ottaa käyttöön oikein, sinun on pystyttävä lukemaan vain luokassa tiedostomuodossa ja suorita siinä määritetyt toiminnot oikein. "

J.S. Bach kuvaili kerran musiikin luomista samalla tavalla:

"Sinun tarvitsee vain koskettaa oikeaa näppäintä oikeaan aikaan."

Joten JVM: n on vain suoritettava Java-ohjelmat oikein. Kuulostaa yksinkertaiselta, se voi jopa näyttää yksinkertaiselta ulkopuolelta, mutta se on massiivinen yritys, varsinkin kun otetaan huomioon Java-kielen teho ja joustavuus.

JVM virtuaalikoneena

JVM on a virtuaalikone joka ajaa Java-luokan tiedostoja kannettavalla tavalla. Virtuaalikoneena oleminen tarkoittaa, että JVM on abstraktio taustalla olevasta, todellisesta koneesta - kuten palvelimesta, jolla ohjelmasi on käynnissä. Riippumatta siitä, mitä käyttöjärjestelmää tai laitteistoa todellisuudessa on, JVM luo ennustettavan ympäristön ohjelmien suorittamiselle. Toisin kuin todellinen virtuaalikone, JVM ei kuitenkaan luo virtuaalista käyttöjärjestelmää. Olisi tarkempaa kuvata JVM: ää a hallittu ajonaikainen ympäristötai a prosessi virtuaalikone.

2. JVM: n toteutukset

JVM-määrityksen toteuttaminen johtaa todelliseen ohjelmistoon, joka on JVM-toteutus. Itse asiassa on olemassa monia JVM-toteutuksia, sekä avoimen lähdekoodin että omistettuja. OpenJDK: n HotSpot JVM on referenssitoteutus, ja se on edelleen yksi maailman perusteellisesti testatuista kooditukikohdista. HotSpot on myös yleisimmin käytetty JVM.

Lähes kaikki lisensoidut JVM: t luodaan haarukoina OpenJDK: sta ja HotSpot JVM: stä, mukaan lukien Oraclen lisensoitu JDK. Kehittäjät, jotka luovat lisensoidun haarukan OpenJDK: sta, ovat usein motivoituneita halusta lisätä käyttöjärjestelmäkohtaisia ​​suorituskyvyn parannuksia. Yleensä lataat ja asennat JVM: n mukana toimitettuna osana Java Runtime Environment (JRE) -palvelua.

3. JVM-esiintymä

Kun JVM-tekniset tiedot on otettu käyttöön ja julkaistu ohjelmistotuotteena, voit ladata ja suorittaa sen ohjelmana. Tämä ladattu ohjelma on JVM: n ilmentymä (tai instantoitu versio).

Suurimman osan ajasta, kun kehittäjät puhuvat "JVM: stä", tarkoitamme JVM-esiintymää, joka toimii ohjelmistokehitys- tai tuotantoympäristössä. Voisit sanoa: "Hei Anand, kuinka paljon muistia palvelimen JVM käyttää?" tai "En voi uskoa, että loin pyöreän puhelun ja pinon ylivuotovirhe kaatui JVM: n. Mikä aloittelijan virhe!"

Mikä on ohjelmistomääritys?

A ohjelmistomäärittely (tai spec) on ihmisen luettavissa oleva suunnitteluasiakirja, joka kuvaa kuinka ohjelmistojärjestelmän tulisi toimia. Spesifikaation tarkoituksena on luoda selkeä kuvaus ja vaatimukset insinööreille koodaamista varten.

Luokkatiedostojen lataaminen ja suorittaminen JVM: ssä

Olemme puhuneet JVM: n roolista Java-sovellusten ajamisessa, mutta miten se suorittaa tehtävänsä? Java-sovellusten suorittamiseksi JVM riippuu Java-luokan latauslaitteesta ja Java-suoritusmoottorista.

Java-luokan lataaja JVM: ssä

Kaikki Java-sovelluksessa on luokka, ja kaikki Java-sovellukset on rakennettu luokista. Hakemus voi koostua yhdestä luokasta tai tuhansista. Java-sovelluksen suorittamiseksi JVM: n on ladattava kootut .class-tiedostot kontekstiin, kuten palvelimeen, jossa niitä voidaan käyttää. JVM riippuu luokan kuormaajasta tämän toiminnon suorittamiseksi.

Java-luokan kuormaaja on osa JVM: ää, joka lataa luokat muistiin ja asettaa ne suoritettaviksi. Luokkakuormaajat käyttävät tekniikoita, kuten laiska lataus ja välimuisti, jotta luokan lataaminen olisi mahdollisimman tehokasta. Luokan lataaminen ei kuitenkaan ole eeppinen aivoriihi, joka (sano) kannettavan ajonaikaisen muistin hallinta on, joten tekniikat ovat suhteellisen yksinkertaisia.

Jokaisessa Java-virtuaalikoneessa on luokan latauslaite. JVM-spesifikaatio kuvaa vakiomenetelmiä luokan kuormaajan kyselylle ja käsittelylle ajon aikana, mutta JVM-toteutukset vastaavat näiden ominaisuuksien täyttämisestä. Kehittäjän näkökulmasta taustalla olevat luokan latausmekanismit ovat tyypillisesti musta laatikko.

Suorituskyky JVM: ssä

Kun luokan kuormaaja on suorittanut luokkien lataamisen, JVM aloittaa koodin suorittamisen kussakin luokassa. suoritusmoottori on JVM-komponentti, joka käsittelee tätä toimintoa. Suoritusmoottori on välttämätön käynnissä olevalle JVM: lle. Itse asiassa kaikissa käytännön tarkoituksissa se on JVM-ilmentymä.

Koodin suorittamiseen kuuluu järjestelmän resurssien käytön hallinta. JVM-suoritusmoottori seisoo käynnissä olevan ohjelman - tiedostoja, verkkoa ja muistia koskevia vaatimuksia - ja käyttöjärjestelmän välillä, joka toimittaa kyseiset resurssit.

Kuinka suoritusmoottori hallitsee järjestelmän resursseja

Järjestelmäresurssit voidaan jakaa kahteen laajaan luokkaan: muisti ja kaikki muu.

Muistakaamme, että JVM on vastuussa käyttämättömän muistin hävittämisestä ja että roskien kerääminen on mekanismi, joka hävittää sen. JVM on myös vastuussa referenssirakenne jonka kehittäjä pitää itsestäänselvyytenä. Esimerkiksi JVM: n toteutusmoottori on vastuussa jotain Uusi avainsanan Java-sovelluksessa ja muuttamalla se käyttöjärjestelmäkohtaiseksi pyynnöksi muistin allokoimiseksi.

Muistin lisäksi suoritusmoottori hallitsee resursseja tiedostojärjestelmään ja verkon I / O: lle. Koska JVM on yhteentoimiva kaikissa käyttöjärjestelmissä, tämä ei ole keskimääräinen tehtävä. Kunkin sovelluksen resurssitarpeiden lisäksi suoritusmoottorin on oltava reagoiva jokaisen käyttöjärjestelmän ympäristöön. Näin JVM pystyy käsittelemään luonnossa esiintyviä vaatimuksia.

JVM-evoluutio: Menneisyys, nykyisyys, tulevaisuus

Vuonna 1995 JVM esitteli kaksi vallankumouksellista konseptia, joista on sittemmin tullut standardihinta nykyaikaiselle ohjelmistokehitykselle: "Kirjoita kerran, suorita missä tahansa" ja automaattinen muistinhallinta. Ohjelmistojen yhteentoimivuus oli tuolloin rohkea konsepti, mutta harvat kehittäjät ajattelevat sitä kahdesti. Samoin, vaikka teknisten esi-isiemme piti hallita ohjelmamuistia itse, sukupolveni kasvoi roskakorin kanssa.

Voisimme sanoa, että James Gosling ja Brendan Eich keksivät nykyaikaisen ohjelmoinnin, mutta tuhannet muut ovat tarkentaneet ja rakentaneet ideoitaan seuraavien vuosikymmenien aikana. Java-virtuaalikone oli alun perin tarkoitettu vain Java-ohjelmalle, mutta nykyään se on kehittynyt tukemaan monia komentosarjoja ja ohjelmointikieliä, kuten Scala, Groovy ja Kotlin. Tulevaisuudessa on vaikea nähdä tulevaisuutta, jossa JVM ei ole merkittävä osa kehitysmaisemaa.

Kaikki JVM: stä

  • Java-haastajat: Langankäyttäytyminen JVM: ssä
  • Java-haastajat: Menetelmän ylikuormitus JVM: ssä
  • JVM: n suorituskyvyn optimointi
  • Bytecode-perustiedot: Kuinka JVM käsittelee tavukoodia
  • Java-poikkeukset: Kuinka JVM käsittelee poikkeuksia
  • Esittelyssä laiha, keskimääräinen Java-virtuaalikone

Tämän tarinan "Mikä on JVM? Esittelyssä Java-virtuaalikone" julkaisi alun perin JavaWorld.