Virtuálny stroj Java Sprievodca architektúrou JVM s komponentom

Obsah:

Anonim

Úvod do Java Virtual Machine

V tomto článku sa dozvieme viac o Java Virtual Machine nazývanom „JVM“. Java Virtual Machine je virtuálny stroj, ktorý umožňuje počítačovému systému spúšťať / spúšťať programy Java. JVM je v podstate motor, ktorý funguje ako runtime prostredie pre kód Java. JVM prevádza kód java do strojového jazyka. Keď spustíte kompilovaný súbor .class, prejde na JVM a potom JVM vráti výstup. Java Virtual Machine je súčasťou JRE, čo znamená „Java Runtime Environment“. Základné úlohy pre Java Virtual Machine pozostávajú z Načítanie kódu, potom ho overte a vykonajte kód. Poskytnite tiež runtime prostredie na vykonávanie kódu. JVM sa skladá z rôznych komponentov, ako je Classloader, zoznamu priestorov pridelených JVM ako Stack, Execution Engine a niekoľkých natívnych knižníc.

Architektúra Java Virtual Machine

Ako je znázornené na obrázku vyššie, architektúra Java Virtual Machine Architecture pozostáva z rôznych komponentov. Dozvieme sa o každej konkrétnej zložke individuálne.

loader

Ako už názov napovedá, jedná sa o komponent zodpovedný za načítanie súborov triedy. Načítanie, prepojenie a inicializácia súboru triedy sú hlavnými funkciami nakladača. Nakladač to funguje za behu.

  • Načítanie: Zavádzač v zásade načíta súbor .class, potom vygeneruje binárny kód a uloží ho do oblasti metód. Bootstrap Classloader, Extension Classloader a Application Classloader sú rôzne ClassLoaders zodpovedné za načítanie rôznych tried.
  • Prepojenie: Tri hlavné funkcie, ako sú Overovanie, Príprava a Riešenie. Začína sa overením súboru .class. Ak overenie zlyhá, udeľuje sa výnimka na overenie doby chodu. Neskôr je pamäť priradená premenným s predvolenými hodnotami. Nakoniec sa symbolické odkazy na pamäť nahradia priamym odkazom z oblasti pamäte.
  • Inicializácia: Toto je posledná časť ClassLoader. Pôvodné hodnoty sú priradené ku všetkým statickým premenným a nasleduje vykonanie statického bloku. Táto časť sa vykonáva zhora nadol triedy.

halda

Tu sú uložené všetky podrobnosti o premenných objektu a inštancie. Je to oblasť zdieľanej pamäte, čo znamená, že tu uložené dáta nie sú bezpečné pre vlákna.

Výnimka v vlákne „main“ java.lang.OutOfMemoryError: Priestor haldy Java

Jednou z najviac relatívnych chýb je výnimka „OutOfMemoryError , čo znamená, že JVM nemôže alokovať objekt v oblasti Heap alebo alokáciu pamäte nemožno vykonať pre ten istý objekt.

Stoh

Toto je miesto, kde sa pre každé nové vlákno vytvára samostatný runtime stack. Tiež známy ako zásobník run-time, vždy, keď sa vyvolá metóda, všetky podrobnosti sa uložia do zodpovedajúceho modulu runtime a po dokončení spôsobu sa tieto podrobnosti zo súboru odstránia.

Registre PC

Pre každé jedno vlákno sa vytvorí samostatný PC (Program Counter) register, ktorý ukladá adresu aktuálnej vykonávacej inštrukcie, ktorá bude neskôr aktualizovaná ďalšou inštrukciou. Táto oblasť pamäte je pomerne malá a má pevnú veľkosť.

Zásobník natívnych metód

Je to jedna z jej vlastných oblastí pamäte, ktorá je vyvolaná vláknom a potom vlákno je na úplne novej úrovni, kde sa už nevykonávajú štruktúry a bezpečnostné obmedzenia vyplývajúce z Java Virtual Machine. V porovnaní s ostatnými oblasťami runtime pamäte nemá pamäť zaberaná zásobami natívnej metódy pevnú veľkosť bez obmedzenia prírastku alebo poklesu.

Natívne rozhranie Java

JNI jednoducho interaguje s nižšie uvedenými knižnicami natívnych metód, ktoré sú implementáciou C, C ++, a poskytujú ich aj vykonávajúcemu motoru. Priamy prístup k kódu zostavy je povolený spoločnosťou JNI. Pre JVM sú Java a Native dva typy kódov. JNI hladko vytvára dobre definované spojenie medzi týmito dvoma.

Knižnice pôvodných metód

Zbierka domorodých knižníc, ako to vyžaduje spúšťací mechanizmus.

Vykonávací motor

Teraz máme program java do bajtkódu, ktorý je priradený k vyššie vysvetleným dátovým oblastiam pomocou zavádzača tried a teraz bytecode bude vykonávaný vykonávacím motorom. Execution Engine jednoducho číta bajtový kód v jednotkách, napríklad stroj číta riadky kódu jeden po druhom. Bajtkód je formát, ktorý je čitateľný pre človeka, a preto stroj nedokáže prečítať, aký má, a je potrebné ho previesť do strojom čitateľného formátu, kde sa na interpretáciu používajú nižšie uvedené komponenty.

Execution Engine má tri hlavné komponenty, ktorými sú tlmočník, JIT kompilátor a zberač odpadu.

1. Tlmočník

Jednoducho vykoná bytecode sekvenčnou metódou. Hovor sa uskutoční dotazom z príkazového riadku so zkompilovaným súborom ako argumentom. Tlmočník je veľmi rýchly pri interpretácii a vykonávaní príkazov jeden po druhom, čo sa pri kompilácii kódu stáva rýchlejšie ako kompilátor JIT.

java class name

Hlavná trieda () musí byť v kompilovanom súbore .class.

2. Kompilátor JIT

Jedna z najdôležitejších súčastí prostredia Java Runtime Environment, ktoré zvyšuje výkon aplikácií Java v čase vykonávania. Žiadny iný komponent nemá väčší vplyv na výkon ako kompilátor JIT. Toto je predvolený kompilátor a aktivuje sa, keď sa volá akákoľvek metóda Java.

3. Zberač odpadu

Ako už názov napovedá, má to niečo spoločné s odpadmi. Odpadky Collector jednoducho vyhľadajú všetky možné objekty dostupné v halde priestoru JVM, skontrolujú, či sa používajú, a potom odstránia nepoužité. Znamená to jednoducho označenie častí pamäte, ktoré sa používajú alebo nie. Potom pokračuje v zametaní, kde jednoducho odstráni označený objekt. Najvýhodnejším prípadom použitia je, že nie je potrebný žiadny systém manuálneho prideľovania pamäte, pretože zberač odpadu vykonáva automatické odstraňovanie nevyužitého priestoru v pamäti. Ale pretože ide o automatickú úlohu, žiadny programátor nemá kontrolu nad plánovaním časového úseku na konkrétne čistenie a pri vyhľadávaní odkazov na objekty nevyžaduje viac energie CPU.

záver

Hoci nie je povinné mať jasnú predstavu o tom, ako JVM funguje, na účely písania kódu Java je nesmierne užitočné. Pre vývojárov, ktorí rozumejú práci JVM, bude písať lepšie a optimalizovaný kód, hoci je požiadavka dlhá alebo zložitá. Okrem tu uvedeného popisu poskytuje JVM širokú škálu funkcií a technológií. Tieto funkcie sa môžu použiť na zlepšenie výkonu podľa potreby konkrétneho dodávateľa

Odporúčané články

Toto je sprievodca po Java Virtual Machine. Tu diskutujeme architektúru java virtuálneho stroja spolu s jeho rôznymi komponentmi. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Bublina Zoradiť v JavaScripte
  2. Životný cyklus vlákna v Jave
  3. Čo je to Java SE?
  4. Najlepšie Java kompilátory
  5. JRE vs JVM | 8 najlepších rozdielov s (infografika)