Programmēšana

Kas ir JVM? Iepazīšanās ar Java virtuālo mašīnu

Java virtuālā mašīna ir programma, kuras mērķis ir izpildīt citas programmas. Tā ir vienkārša ideja, kas arī ir viens no mūsu izcilākajiem kodēšanas piemēriem kung fu. JVM savā laikā izjauca status quo un turpina atbalstīt programmēšanas jauninājumus arī šodien.

Kāpēc tiek izmantots JVM

JVM ir divas galvenās funkcijas: ļaut Java programmām darboties jebkurā ierīcē vai operētājsistēmā (pazīstams kā princips "Rakstīt vienreiz, palaist jebkur"), kā arī pārvaldīt un optimizēt programmas atmiņu. Kad 1995. gadā tika izlaista Java, visas datorprogrammas tika ierakstītas noteiktā operētājsistēmā, un programmu atmiņu pārvaldīja programmatūras izstrādātājs. Tātad JVM bija atklāsme.

JavaWorld /

JVM tehniskā definīcija ir noderīga, un programmatūras izstrādātāji to domā arī ikdienā. Sadalīsim tos:

  • Tehniskā definīcija: JVM ir programmatūras specifikācija, kas izpilda kodu un nodrošina koda izpildlaiku.
  • Ikdienas definīcija: JVM ir veids, kā mēs vadām Java programmas. Mēs konfigurējam JVM iestatījumus un pēc tam paļaujamies uz to, lai izpildes laikā pārvaldītu programmas resursus.

Kad izstrādātāji runā par JVM, mēs parasti domājam procesu, kas darbojas mašīnā, it īpaši serverī, kas attēlo un kontrolē Java lietotnes resursu izmantošanu. Kontrastējiet to ar JVM specifikācija, kas apraksta prasības programmas izveidei, kas veic šos uzdevumus.

Kas attīsta un uztur JVM?

JVM plaši izvieto, intensīvi izmanto un uztur daži ļoti spilgti programmētāji, gan korporatīvie, gan atvērtā koda. OpenJDK projekts ir Sun Microsystems lēmuma par atvērtā koda Java pēcnācējs. OpenJDK ir turpinājis, izmantojot Oracle Java pārvaldību, lielāko daļu smagā celšanas šajās dienās paveica Oracle inženieri.

Atmiņas pārvaldība JVM

Visizplatītākā mijiedarbība ar darbojošos JVM ir atmiņas lietojuma pārbaude kaudzē un kaudzē. Visizplatītākā pielāgošana ir JVM atmiņas iestatījumu pielāgošana.

Atkritumu kolekcija

Pirms Java visu programmas atmiņu pārvaldīja programmētājs. Java programmā programmas atmiņu pārvalda JVM. JVM pārvalda atmiņu, izmantojot procesu, ko sauc atkritumu kolekcija, kas nepārtraukti identificē un izslēdz Java programmās neizmantoto atmiņu. Atkritumu savākšana notiek darbojas JVM.

Pirmajās dienās Java tika daudz kritizēta par to, ka tā nav tik "tuvu metālam" kā C ++, un tāpēc tā nav tik ātra. Īpaši strīdīgs bija atkritumu savākšanas process. Kopš tā laika atkritumu savākšanai ir piedāvāti un izmantoti dažādi algoritmi un pieejas. Ar konsekventu attīstību un optimizāciju atkritumu savākšana ir ievērojami uzlabojusies.

Ko nozīmē “tuvu metālam”?

Kad programmētāji saka, ka programmēšanas valoda vai platforma ir "tuvu metālam", mēs domājam, ka izstrādātājs spēj programmatiski (rakstot kodu) pārvaldīt operētājsistēmas atmiņu. Teorētiski programmētāji var izspiest lielāku veiktspēju no mūsu programmām, nosakot, cik daudz tiek izmantots un kad to izmest. Vairumā gadījumu atmiņas pārvaldības deleģēšana ļoti izsmalcinātam procesam, piemēram, JVM, nodrošina labāku veiktspēju un mazāk kļūdu nekā pats.

JVM trīs daļās

Varētu teikt, ka JVM ir trīs aspekti: specifikācija, ieviešana un instance. Apsvērsim katru no šiem.

1. JVM specifikācija

Pirmkārt, JVM ir programmatūras specifikācija. Nedaudz apļveida veidā JVM spec uzsver, ka tā ieviešanas detaļas ir definēts specifikācijā, lai nodrošinātu maksimālu radošumu tā realizācijā:

"Lai pareizi ieviestu Java virtuālo mašīnu, jums jāspēj lasīt tikai klasē faila formātu un pareizi veic tajā norādītās darbības. "

Dž. Reiz Bahs mūzikas radīšanu raksturoja līdzīgi:

"Viss, kas jums jādara, ir pieskarties pareizajam taustiņam īstajā laikā."

Tātad viss, kas JVM ir jādara, ir pareizi palaist Java programmas. Izklausās vienkārši, no ārpuses pat varētu izskatīties vienkārši, taču tas ir milzīgs darbs, īpaši ņemot vērā Java valodas spēku un elastību.

JVM kā virtuāla mašīna

JVM ir a virtuālā iekārta kas pārvalda Java klases failus. Būt virtuālai mašīnai nozīmē, ka JVM ir pamatā esošās faktiskās mašīnas abstrakcija, piemēram, serveris, kurā darbojas jūsu programma. Neatkarīgi no tā, kāda operētājsistēma vai aparatūra faktiski atrodas, JVM izveido paredzamu vidi programmu darbībai. Tomēr atšķirībā no patiesas virtuālās mašīnas JVM neveido virtuālo operētājsistēmu. Precīzāk būtu aprakstīt JVM kā a pārvaldīta izpildlaika videvai a procesu virtuālā mašīna.

2. JVM ieviešana

Īstenojot JVM specifikāciju, tiek iegūta faktiska programmatūra, kas ir JVM ieviešana. Faktiski ir daudz JVM ieviešanas, gan atvērtā koda, gan īpašumtiesību. OpenJDK HotSpot JVM ir atsauces ieviešana, un tā joprojām ir viena no visprecīzāk pārbaudītajām kodu bāzēm pasaulē. HotSpot ir arī visbiežāk izmantotais JVM.

Gandrīz visi licencētie JVM ir izveidoti kā OpenJDK un HotSpot JVM dakšas, ieskaitot Oracle licencēto JDK. Izstrādātājus, kas izveido licencētu dakšu ārpus OpenJDK, bieži motivē vēlme pievienot OS raksturīgus veiktspējas uzlabojumus. Parasti JVM lejupielādējat un instalējat kā Java Runtime Environment (JRE) komplektā iekļautu daļu.

3. JVM instance

Pēc tam, kad JVM specifikācija ir ieviesta un izlaista kā programmatūras produkts, varat to lejupielādēt un palaist kā programmu. Lejupielādētā programma ir JVM instance (vai instantiated versija).

Lielākoties, kad izstrādātāji runā par "JVM", mēs atsaucamies uz JVM instanci, kas darbojas programmatūras izstrādes vai ražošanas vidē. Jūs varētu teikt: "Hei Anand, cik daudz atmiņas šajā serverī izmanto JVM?" vai: "Es nevaru noticēt, ka esmu izveidojis apļveida zvanu, un kaudzes pārpildes kļūda avarēja manam JVM. Kāda iesācēju kļūda!"

Kas ir programmatūras specifikācija?

A programmatūras specifikācija (vai spec) ir cilvēka lasāms projektēšanas dokuments, kurā aprakstīts, kā programmatūras sistēmai jādarbojas. Specifikācijas mērķis ir izveidot skaidru aprakstu un prasības, lai inženieri varētu kodēt.

Klases failu ielāde un izpilde JVM

Mēs esam runājuši par JVM lomu Java lietojumprogrammu darbināšanā, bet kā tā veic savu funkciju? Lai palaistu Java lietojumprogrammas, JVM ir atkarīgs no Java klases ielādētāja un Java izpildes motora.

Java klases iekrāvējs JVM

Viss Java valodā ir klase, un visas Java lietojumprogrammas ir veidotas no klasēm. Pieteikums varētu sastāvēt no vienas klases vai tūkstošiem. Lai palaistu Java lietojumprogrammu, JVM jāielādē apkopoti .class faili kontekstā, piemēram, serverī, kur tiem var piekļūt. Lai veiktu šo funkciju, JVM ir atkarīgs no klases iekrāvēja.

Java klases iekrāvējs ir JVM daļa, kas klases ielādē atmiņā un padara tās pieejamas izpildei. Klases iekrāvēji izmanto tādas metodes kā slinks ielāde un kešatmiņa, lai padarītu klases iekraušanu pēc iespējas efektīvāku. Tas nozīmē, ka klases ielāde nav tā episkā prāta spēle, kas (teiksim) ir pārnēsājama izpildlaika atmiņas pārvaldība, tāpēc metodes ir salīdzinoši vienkāršas.

Katrā Java virtuālajā mašīnā ietilpst klases iekrāvējs. JVM specifikācijā aprakstītas standarta metodes, kā vaicāt un manipulēt ar klases iekrāvēju izpildlaika laikā, taču JVM ieviešana ir atbildīga par šo iespēju izpildi. No izstrādātāja viedokļa pamatā esošie klases iekrāvēju mehānismi parasti ir melnā kaste.

Izpildes dzinējs JVM

Kad klases iekrāvējs ir paveicis darbu, lai ielādētu klases, JVM sāk izpildīt kodu katrā klasē. The izpildes dzinējs ir JVM komponents, kas apstrādā šo funkciju. Izpildes dzinējs ir būtisks darbojošajam JVM. Faktiski visiem praktiskajiem mērķiem tā ir JVM instance.

Koda izpilde ietver piekļuves pārvaldību sistēmas resursiem. JVM izpildes dzinējs atrodas starp darbojošos programmu - ar prasībām pēc failu, tīkla un atmiņas resursiem - un operētājsistēmu, kas piegādā šos resursus.

Kā izpildes dzinējs pārvalda sistēmas resursus

Sistēmas resursus var iedalīt divās lielās kategorijās: atmiņa un viss pārējais.

Atgādinām, ka JVM ir atbildīgs par neizmantotās atmiņas iznīcināšanu un ka atkritumu savākšana ir mehānisms, kas veic šo iznīcināšanu. JVM ir atbildīga arī par atsauces struktūra ka izstrādātājs uzskata par pašsaprotamu. Piemēram, JVM izpildes dzinējs ir atbildīgs par kaut ko līdzīgu jauns atslēgvārdu Java valodā un pārvēršot to par operētājsistēmas specifisku pieprasījumu pēc atmiņas piešķiršanas.

Papildus atmiņai izpildes dzinējs pārvalda resursus piekļuvei failu sistēmai un tīkla I / O. Tā kā JVM ir savietojams visās operētājsistēmās, tas nav nekāds uzdevums. Papildus katras lietojumprogrammas resursu vajadzībām izpildes motoram ir jāreaģē uz katru OS vidi. Tieši tā JVM spēj izpildīt savvaļas prasības.

JVM evolūcija: pagātne, tagadne, nākotne

1995. gadā JVM ieviesa divus revolucionārus jēdzienus, kas kopš tā laika ir kļuvuši par standarta cenu mūsdienu programmatūras izstrādei: "Vienreiz rakstīt, palaist jebkur" un automātisko atmiņas pārvaldību. Programmatūras savietojamība tajā laikā bija drosmīgs jēdziens, taču daži izstrādātāji šodien par to domātu divreiz. Tāpat kā mūsu inženierzinātņu priekštečiem pašiem bija jāpārvalda programmas atmiņa, mana paaudze uzauga ar atkritumu savākšanu.

Mēs varētu teikt, ka Džeimss Goslings un Brendans Eihs izgudroja mūsdienīgu programmēšanu, taču tūkstošiem citu cilvēku turpmākajās desmitgadēs ir pilnveidojuši un balstījušies uz savām idejām. Tā kā Java virtuālā mašīna sākotnēji bija paredzēta tikai Java, šodien tā ir attīstījusies, lai atbalstītu daudzas skriptu un programmēšanas valodas, tostarp Scala, Groovy un Kotlin. Skatoties nākotnē, ir grūti iedomāties nākotni, kurā JVM nav nozīmīga attīstības ainavas sastāvdaļa.

Viss par JVM

  • Java izaicinātāji: pavedienu uzvedība JVM
  • Java izaicinātāji: metodes pārslodze JVM
  • Iekšpusē JVM veiktspējas optimizācija
  • Bite koda pamati: kā JVM apstrādā baitu kodu
  • Java izņēmumi: kā JVM apstrādā izņēmumus
  • Iepazīstinām ar lieso, vidējo Java virtuālo mašīnu

Šo stāstu "Kas ir JVM? Iepazīstinām ar Java virtuālo mašīnu" sākotnēji publicēja JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found