Što je JVM? Predstavljamo Java virtualni stroj

Java virtualni stroj je program čija je svrha izvršavanje drugih programa. To je jednostavna ideja koja također stoji kao jedan od naših najvećih primjera kodiranja kung fua . JVM je poremetio status quo za svoje vrijeme i nastavlja podržavati programske inovacije i danas.

Za što se koristi JVM

JVM ima dvije primarne funkcije: omogućiti Java programima da se izvode na bilo kojem uređaju ili operativnom sustavu (poznat kao princip "Napiši jednom, pokreni bilo gdje") te upravljati i optimizirati programsku memoriju. Kada je Java objavljena 1995. godine, svi računalni programi napisani su u određeni operativni sustav, a programskom memorijom upravljao je programer softvera. Dakle, JVM je bio otkriće.

JavaWorld /

Imati tehničku definiciju za JVM korisno je, a postoji i svakodnevni način na koji programeri softvera razmišljaju o tome. Razdvojimo one:

  • Tehnička definicija : JVM je specifikacija za softverski program koji izvršava kôd i pruža runtime okruženje za taj kôd.
  • Svakodnevna definicija : JVM je način na koji pokrećemo naše Java programe. Konfiguriramo postavke JVM-a i oslanjamo se na njih za upravljanje programskim resursima tijekom izvršavanja.

Kad programeri govore o JVM-u, obično mislimo na postupak pokrenut na stroju, posebno poslužitelju, koji predstavlja i kontrolira upotrebu resursa za Java aplikaciju. Suprotstavite to JVM specifikaciji koja opisuje zahtjeve za izgradnju programa koji izvršava ove zadatke.

Tko razvija i održava JVM?

JVM je široko raspoređen, intenzivno se koristi i održavaju ga neki vrlo pametni programeri, kako korporativni tako i otvoreni kod. Projekt OpenJDK potomak je odluke Sun Microsystems-a o Javi otvorenog koda. OpenJDK je nastavio kroz Oracleovo upravljanje Javaom, s većim dijelom teških dana koje su napravili Oracleovi inženjeri.

Upravljanje memorijom u JVM-u

Najčešća interakcija s pokrenutim JVM-om je provjera upotrebe memorije u hrpi i stogu. Najčešća prilagodba je podešavanje postavki memorije JVM-a.

Kolekcija smeća

Prije Jave programer je upravljao svom programskom memorijom. U Javi programskom memorijom upravlja JVM. JVM upravlja memorijom kroz postupak nazvan skupljanje smeća , koji kontinuirano identificira i uklanja neiskorištenu memoriju u Java programima. Prikupljanje smeća događa se unutar JVM-a koji radi.

U prvim danima Java je bila izložena mnogim kritikama zbog toga što nije bila "blizu metala" kao C ++, a samim time ni tako brza. Postupak odvoza smeća bio je posebno kontroverzan. Od tada su predloženi i korišteni razni algoritmi i pristupi za odvoz smeća. Dosljednim razvojem i optimizacijom odvoz smeća se znatno poboljšao.

Što znači 'blizu metala'?

Kad programeri kažu da je programski jezik ili platforma "blizu metala", mislimo da je programer sposoban programski (pisanjem koda) upravljati memorijom operativnog sustava. U teoriji programeri mogu izvući više performansi iz naših programa određujući koliko se koristi i kada ih treba odbaciti. U većini slučajeva, delegiranje upravljanja memorijom na vrlo profinjen postupak poput JVM daje bolje performanse i manje pogrešaka nego što to radite sami.

JVM u tri dijela

Moglo bi se reći da JVM imaju tri aspekta: specifikacija, implementacija i instanca. Razmotrimo svaku od ovih.

1. JVM specifikacija

Prvo, JVM je softverska specifikacija. Na pomalo kružan način, JVM specifikacija naglašava da detalji o njenoj provedbi nisu definirani u specifikaciji, kako bi se omogućila maksimalna kreativnost u njezinoj realizaciji:

"Da biste ispravno implementirali Java virtualni stroj, trebate samo moći čitati classformat datoteke i ispravno izvoditi tamo navedene radnje."

JS Bach jednom je opisao stvaranje glazbe na sličan način:

"Sve što trebate učiniti je dodirnuti pravu tipku u pravo vrijeme."

Dakle, sve što JVM mora učiniti je pravilno pokretati Java programe. Zvuči jednostavno, možda čak i izvana izgleda jednostavno, ali to je ogroman pothvat, posebno s obzirom na snagu i fleksibilnost Java jezika.

JVM kao virtualni stroj

JVM je virtualni stroj koji prenosi datoteke klase Java na prijenosni način. Biti virtualni stroj znači da je JVM apstrakcija osnovnog, stvarnog stroja - kao što je poslužitelj na kojem je pokrenut vaš program. Bez obzira na to koji operativni sustav ili hardver zapravo postoje, JVM stvara predvidljivo okruženje za pokretanje programa. Međutim, za razliku od pravog virtualnog stroja, JVM ne stvara virtualni operativni sustav. Bilo bi preciznije JVM opisati kao upravljano okruženje izvođenja ili virtualni stroj procesa .

2. JVM implementacije

Implementacija JVM specifikacije rezultira stvarnim softverskim programom, koji je JVM implementacija. Zapravo postoji mnogo implementacija JVM-a, i otvorenih i vlasničkih. OpenJDK-ov HotSpot JVM referentna je implementacija i ostaje jedna od temeljito provjerenih i testiranih baza kodova na svijetu. HotSpot je ujedno i najčešće korišten JVM.

Gotovo svi licencirani JVM-ovi stvoreni su kao račvanja za OpenJDK i HotSpot JVM, uključujući Oracleov licencirani JDK. Programeri koji kreiraju licenciranu vilicu na OpenJDK-u često su motivirani željom da dodaju poboljšanja performansi specifičnih za OS. Tipično preuzimate i instalirate JVM kao paketni paket Java Runtime Environment (JRE).

3. JVM instanca

Nakon što je JVM specifikacija implementirana i objavljena kao softverski proizvod, možete je preuzeti i pokrenuti kao program. Taj preuzeti program je instanca (ili instancirana verzija) JVM-a.

Većinu vremena, kada programeri govore o "JVM-u", mislimo na JVM instancu koja se izvodi u razvojnom ili proizvodnom okruženju softvera. Mogli biste reći, "Hej Anande, koliko memorije koristi JVM na tom poslužitelju?" ili, "Ne mogu vjerovati da sam stvorio kružni poziv i pogreška prelijevanja steka srušila je moj JVM. Kakva greška za početnika!"

Što je specifikacija softvera?

Softver specifikacija (ili spec) je dizajn dokument svima čitljiv koja opisuje kako programski sustav bi trebao raditi. Svrha specifikacije je stvoriti jasan opis i zahtjeve za inženjere za kodiranje.

Učitavanje i izvršavanje datoteka klase u JVM-u

Razgovarali smo o ulozi JVM-a u pokretanju Java aplikacija, ali kako izvršava svoju funkciju? Da bi pokrenuo Java programe, JVM ovisi o učitaču klase Java i Java izvršnom stroju.

Učitavač klase Java u JVM-u

Sve u Javi je klasa i svi su Java programi izgrađeni od klasa. Aplikacija se može sastojati od jedne klase ili tisuća. Da bi pokrenuo Java program, JVM mora učitati kompilirane datoteke .class u kontekst, poput poslužitelja, gdje im se može pristupiti. JVM ovisi o učitatelju svoje klase da bi izvršio ovu funkciju.

Učitavač klase Java dio je JVM-a koji učitava klase u memoriju i čini ih dostupnima za izvršenje. Učitavači razreda koriste tehnike poput lijenog učitavanja i predmemoriranja kako bi učitavanje razreda učinili što učinkovitijim. Usprkos tome, učitavanje klase nije epska zadirkivačica koja je (recimo) prijenosno upravljanje runtime memorijom, pa su tehnike relativno jednostavne.

Svaki Java virtualni stroj uključuje učitavač klase. Specifikacija JVM-a opisuje standardne metode za postavljanje upita i manipulaciju učitavačem klase tijekom izvođenja, ali implementacije JVM-a odgovorne su za ispunjavanje tih mogućnosti. Iz perspektive programera, temeljni mehanizmi učitavanja klasa obično su crni okvir.

Izvršni stroj u JVM-u

Nakon što učitavač klasa obavi svoj posao učitavanja klasa, JVM započinje s izvršavanjem koda u svakoj klasi. Izvršenje motor je JVM komponenta koja obrađuje ovu funkciju. Izvršni mehanizam je bitan za JVM koji radi. Zapravo, u sve praktične svrhe, to je instanca JVM.

Izvršenje koda uključuje upravljanje pristupom resursima sustava. Izvršni mehanizam JVM stoji između pokrenutog programa - sa svojim zahtjevima za datotečnim, mrežnim i memorijskim resursima - i operacijskog sustava koji te resurse isporučuje.

Kako izvršni mehanizam upravlja sistemskim resursima

Resursi sustava mogu se podijeliti u dvije široke kategorije: memorija i sve ostalo.

Sjetimo se da je JVM odgovoran za odlaganje neiskorištene memorije, a da je odvoz smeća mehanizam koji vrši to odlaganje. JVM je također odgovoran za dodjelu i održavanje referentne strukture koju programer uzima zdravo za gotovo. Kao primjer, izvršni mehanizam JVM-a odgovoran je za uzimanje nečeg poput newključne riječi u Javi i pretvaranje u zahtjev specifičan za dodjelu memorije specifičan za OS.

Osim memorije, izvršni mehanizam upravlja resursima za pristup datotečnom sustavu i mrežnim I / O. Budući da je JVM interoperabilan u svim operativnim sustavima, to nije nikakav zadatak. Pored potreba resursa svake aplikacije, izvršni mehanizam mora odgovarati svakom OS okruženju. Tako se JVM može nositi s divljim zahtjevima.

JVM evolucija: prošlost, sadašnjost, budućnost

JVM je 1995. predstavio dva revolucionarna koncepta koji su od tada postali standardna cijena modernog razvoja softvera: "Napišite jednom, pokrenite bilo gdje" i automatsko upravljanje memorijom. U to je vrijeme softverska interoperabilnost bila hrabar koncept, ali malo bi danas programera dvaput razmislilo o tome. Isto tako, dok su naši inženjerski prethodnici morali sami upravljati programskom memorijom, moja je generacija odrasla sa skupljanjem smeća.

Mogli bismo reći da su James Gosling i Brendan Eich izmislili moderno programiranje, ali tisuće drugih usavršile su i nadogradile svoje ideje tijekom sljedećih desetljeća. Dok je Java Virtual Machine izvorno bio samo za Javu, danas se razvio tako da podržava mnoge skriptne i programske jezike, uključujući Scala, Groovy i Kotlin. Veseleći se, teško je vidjeti budućnost u kojoj JVM nije istaknuti dio razvojnog krajolika.

Sve o JVM-u

  • Java izazivači: Ponašanje niti u JVM-u
  • Java izazivači: Preopterećenje metoda u JVM-u
  • Unutar JVM optimizacije performansi
  • Osnove bytecode-a: Kako JVM obrađuje bytecode
  • Java iznimke: Kako JVM obrađuje iznimke
  • Predstavljamo vitki, zli Java virtualni stroj

Ovu priču, "Što je JVM? Predstavljamo Java virtualni stroj" izvorno je objavio JavaWorld.