Programovanie

Čo je JVM? Predstavujeme virtuálny počítač Java

Java Virtual Machine je program, ktorého účelom je vykonávanie iných programov. Je to jednoduchý nápad, ktorý stojí aj za jedným z našich najväčších príkladov kódovania kung-fu. Spoločný podnik JVM na svoju dobu narušil súčasný stav a pokračuje v podpore programových inovácií dodnes.

Na čo sa JVM používa

JVM má dve primárne funkcie: umožniť spustenie programov Java na ľubovoľnom zariadení alebo operačnom systéme (známy ako princíp „Jedenkrát napísať, spustiť kdekoľvek“) a spravovať a optimalizovať programovú pamäť. Po vydaní Javy v roku 1995 boli všetky počítačové programy zapísané do konkrétneho operačného systému a programovú pamäť spravoval vývojár softvéru. Takže JVM bolo zjavením.

JavaWorld /

Technická definícia JVM je užitočná a existuje aj každodenný spôsob, ako nad tým vývojári softvéru premýšľajú. Poďme si ich rozdeliť:

  • Technická definícia: JVM je špecifikácia softvérového programu, ktorý vykonáva kód a poskytuje runtime prostredie pre tento kód.
  • Každodenná definícia: JVM je spôsob, akým prevádzkujeme naše programy Java. Konfigurujeme nastavenia JVM a potom sa spoliehame na to, že bude počas vykonávania spravovať prostriedky programu.

Keď vývojári hovoria o JVM, máme obvykle na mysli proces bežiaci na stroji, najmä na serveri, ktorý predstavuje a riadi využitie prostriedkov pre aplikáciu Java. Porovnajte to s Špecifikácia JVM, ktorý popisuje požiadavky na zostavenie programu, ktorý vykonáva tieto úlohy.

Kto vyvíja a udržiava JVM?

JVM je široko nasadený, hojne používaný a udržiavaný niektorými veľmi bystrými programátormi, firemnými aj open source. Projekt OpenJDK je potomkom rozhodnutia spoločnosti Sun Microsystems o otvorenom prostredí Java. OpenJDK pokračovala v správe Oracle nad Java, pričom v dnešnej dobe väčšinu ťažkých ťažkostí vykonali inžinieri Oracle.

Správa pamäte v JVM

Najbežnejšou interakciou s bežiacim JVM je kontrola využitia pamäte v halde a zásobníku. Najbežnejšou úpravou je vyladenie nastavení pamäte JVM.

Zber odpadu

Pred programom Java bola všetka programová pamäť spravovaná programátorom. V prostredí Java spravuje programovú pamäť JVM. JVM spravuje pamäť prostredníctvom procesu s názvom odvoz odpadu, ktorá nepretržite identifikuje a eliminuje nevyužitú pamäť v programoch Java. Zber odpadu sa deje vo vnútri bežiaceho JVM.

Na začiatku bola Java veľmi kritizovaná za to, že nie je tak „blízka kovu“ ako C ++, a preto nie je taká rýchla. Kontroverzný bol najmä proces zberu odpadu. Odvtedy boli na zber odpadkov navrhnuté a použité rôzne algoritmy a prístupy. Vďaka dôslednému vývoju a optimalizácii sa zber odpadu výrazne zlepšil.

Čo znamená „blízke kovu“?

Keď programátori tvrdia, že programovací jazyk alebo platforma sú „blízko kovu“, máme tým na mysli, že vývojár dokáže programovo (napísaním kódu) spravovať pamäť operačného systému. Teoreticky môžu programátori vyžmýkať z našich programov vyšší výkon stanovením toho, koľko sa použije a kedy ho majú zahodiť. Vo väčšine prípadov delegovanie správy pamäte na vysoko prepracovaný proces, ako je JVM, prináša lepší výkon a menej chýb, ako keby ste to robili sami.

JVM v troch častiach

Dalo by sa povedať, že JVM má tri aspekty: špecifikáciu, implementáciu a inštanciu. Zvážme každú z nich.

1. Špecifikácia JVM

Po prvé, JVM je softvérová špecifikácia. Trochu kruhovým spôsobom špecifikácia JVM zdôrazňuje, že sú podrobnosti jej implementácie nie definované v špecifikácii, aby sa pri realizácii zabezpečila maximálna kreativita:

"Aby ste správne implementovali virtuálny stroj Java, musíte byť schopní čítať iba trieda formát súboru a správne vykonávať operácie v ňom uvedené. "

J.S. Bach kedysi opísal vytváranie hudby podobne:

„Všetko, čo musíš urobiť, je dotknúť sa správneho klávesu v správnom čase.“

Všetko, čo musí JVM urobiť, je teda správne spustiť programy Java. Znie to jednoducho, zvonka môže dokonca vyzerať jednoducho, ale je to obrovský krok, najmä vzhľadom na silu a flexibilitu jazyka Java.

JVM ako virtuálny stroj

JVM je a virtuálny prístroj ktorý prevádza súbory triedy Java prenosným spôsobom. Byť virtuálnym strojom znamená, že JVM je abstrakciou základného, ​​skutočného stroja - napríklad servera, na ktorom je spustený váš program. Bez ohľadu na to, aký operačný systém alebo hardvér je v skutočnosti prítomný, JVM vytvára predvídateľné prostredie pre spustenie programov. Na rozdiel od skutočného virtuálneho stroja však JVM nevytvára virtuálny operačný systém. Bolo by presnejšie popísať JVM ako a riadené runtime prostredie, alebo a spracovať virtuálny stroj.

2. Implementácie JVM

Výsledkom implementácie špecifikácie JVM je skutočný softvérový program, ktorým je implementácia JVM. V skutočnosti existuje veľa implementácií JVM, a to otvorených aj proprietárnych. HotSpot JVM od OpenJDK je referenčnou implementáciou a zostáva jednou z najdôkladnejšie osvedčených kódových báz na svete. HotSpot je tiež najbežnejšie používaným JVM.

Takmer všetky licencované JVM sú vytvorené ako vidličky z OpenJDK a HotSpot JVM, vrátane licencovaných JDK spoločnosti Oracle. Vývojári, ktorí vytvárajú licencovanú vidlicu mimo OpenJDK, sú často motivovaní túžbou pridať vylepšenia výkonu špecifické pre OS. Spravidla si JVM stiahnete a nainštalujete ako súčasť Java Runtime Environment (JRE).

3. Inštancia JVM

Po implementácii a vydaní špecifikácie JVM ako softvérového produktu si ju môžete stiahnuť a spustiť ako program. Stiahnutý program je inštanciou (alebo inštanciou) JVM.

Väčšinou, keď vývojári hovoria o „JVM“, máme na mysli inštanciu JVM bežiacu v prostredí vývoja alebo výroby softvéru. Možno si poviete: „Hej Anand, koľko pamäte využíva server JVM na danom serveri?“ alebo: "Nemôžem uveriť, že som vytvoril kruhový hovor a chyba pretečenia zásobníka mi zrútila JVM. Aká nováčikovská chyba!"

Čo je to softvérová špecifikácia?

A softvérová špecifikácia (alebo špecifikácia) je dokument čitateľný človekom, ktorý popisuje, ako by mal softvérový systém fungovať. Účelom špecifikácie je vytvoriť jasný popis a požiadavky, ktoré majú technici kódovať.

Načítanie a vykonávanie súborov triedy v JVM

Hovorili sme o úlohe JVM pri spúšťaní aplikácií Java, ale ako vykonáva svoju funkciu? Aby bolo možné spustiť Java aplikácie, JVM závisí od načítavača triedy Java a spúšťacieho modulu Java.

Zavádzač triedy Java v JVM

Všetko v Jave je trieda a všetky Java aplikácie sú zostavené z tried. Aplikácia môže pozostávať z jednej triedy alebo tisícov. Aby bolo možné spustiť aplikáciu Java, musí JVM načítať skompilované súbory .class do kontextu, napríklad na server, kde k nim možno získať prístup. Na vykonanie tejto funkcie je JVM závislý od svojho nakladača tried.

Zavádzač tried Java je časť JVM, ktorá načítava triedy do pamäte a sprístupňuje ich na vykonávanie. Načítavače tried používajú techniky ako lenivé načítanie a ukladanie do medzipamäte, aby bolo načítanie tried čo najefektívnejšie. To znamená, že načítanie triedy nie je epickým hlavolamom, ktorý (povedzme) je správa prenosnej pamäte runtime, takže techniky sú pomerne jednoduché.

Každý virtuálny počítač Java obsahuje zavádzač tried. Špecifikácia JVM popisuje štandardné metódy na dopytovanie a manipuláciu s nakladačom tried za behu, ale implementácia JVM je zodpovedná za splnenie týchto schopností. Z pohľadu vývojára sú základné mechanizmy zavádzača tried zvyčajne čierna skrinka.

Vykonávací modul v JVM

Keď nakladač tried dokončí prácu s načítaním tried, JVM začne vykonávať kód v každej triede. The exekučný stroj je komponent JVM, ktorý spracováva túto funkciu. Vykonávací modul je pre bežiaci JVM nevyhnutný. V skutočnosti ide z praktických dôvodov o inštanciu JVM.

Spustenie kódu zahŕňa správu prístupu k systémovým prostriedkom. Vykonávací modul JVM stojí medzi spusteným programom - s požiadavkami na súborové, sieťové a pamäťové zdroje - a operačným systémom, ktorý tieto zdroje dodáva.

Ako vykonávací modul spravuje systémové prostriedky

Systémové prostriedky možno rozdeliť do dvoch širokých kategórií: pamäť a všetko ostatné.

Pripomeňme, že JVM je zodpovedný za likvidáciu nepoužitej pamäte a že odvoz odpadu je mechanizmus, ktorý túto likvidáciu vykonáva. JVM je zodpovedný aj za prideľovanie a udržiavanie referenčná štruktúra ktoré developer považuje za samozrejmé. Napríklad vykonávací engine JVM je zodpovedný za prijatie niečoho podobného Nový kľúčové slovo v Jave a premeniť ho na požiadavku na pridelenie pamäte špecifickú pre OS.

Okrem pamäte riadi spúšťací modul zdroje pre prístup k súborovému systému a sieťové I / O. Pretože JVM je interoperabilný medzi operačnými systémami, nejde o nijakú strednú úlohu. Okrem potrieb zdrojov každej aplikácie musí byť spúšťací modul responzívny s každým prostredím OS. Takto je JVM schopný zvládnuť divoké požiadavky.

Evolúcia JVM: Minulosť, prítomnosť, budúcnosť

V roku 1995 predstavil JVM dva revolučné koncepty, ktoré sa odvtedy stali štandardným tarifom pre moderný vývoj softvéru: „Jedenkrát napísať, spustiť kdekoľvek“ a automatická správa pamäte. Softvérová interoperabilita bola v tom čase odvážnym konceptom, ale len málo vývojárov si to dnes rozmyslí. Rovnako, zatiaľ čo naši technickí predkovia museli sami spravovať programovú pamäť, moja generácia vyrastala so zbieraním odpadkov.

Dalo by sa povedať, že James Gosling a Brendan Eich vynašli moderné programovanie, tisíce ďalších však v priebehu nasledujúcich desaťročí svoje nápady zdokonalili a stavali na nich. Zatiaľ čo Java Virtual Machine bol pôvodne len pre Javu, dnes sa vyvinula tak, aby podporovala mnoho skriptovacích a programovacích jazykov, vrátane Scala, Groovy a Kotlin. Pri pohľade do budúcnosti je ťažké vidieť budúcnosť, kde JVM nie je významnou súčasťou rozvojovej krajiny.

Všetko o JVM

  • Vyzývatelia Java: Správanie sa vlákien v JVM
  • Vyzývatelia Java: Preťaženie metód v JVM
  • Vo vnútri optimalizácia výkonu JVM
  • Základy bytového kódu: Ako JVM narába s bytovým kódom
  • Výnimky Java: Ako JVM spracováva výnimky
  • Predstavujeme štíhly, priemerný virtuálny stroj Java

Tento príbeh, „Čo je to JVM? Predstavujeme vám Java Virtual Machine“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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