Arhitectura și componentele Java explicate [2022]

Publicat: 2021-01-04

Înainte de a deveni un programator Java, trebuie să înțelegeți fiecare aspect al acestui limbaj. Unul dintre cele mai importante aspecte ale Java este arhitectura Java. Un alt subiect tehnic în acest sens este cunoașterea componentelor JVM. Deci, vom acoperi ambele subiecte critice în acest articol.

Acest articol presupune că aveți o înțelegere generală a elementelor de bază ale Java. Chiar dacă nu sunteți familiarizat cu elementele fundamentale ale Java, puteți adresa orice întrebări pe care le puteți avea în secțiunea de comentarii de mai jos. Să începem:

Cuprins

Arhitectura Java explicată

Java are două procese, compilare și interpretare. Compilatorul Java convertește codul prezent în Java în coduri de octeți. Java Virtual Machine (JVM) convertește codurile de octeți în cod de mașină pe care mașina îl execută direct.

Putem descrie acest proces în următorii pași:

  • Codul sursă merge la compilatorul Java
  • Compilatorul Java îl convertește în coduri de octeți
  • Codurile de octeți merg la mașina virtuală Java
  • În cele din urmă, merge la OS (sistemul de operare)

Acum că suntem puțin familiarizați cu modul în care funcționează arhitectura Java, putem arunca o privire asupra diferitelor sale componente:

JVM (mașină virtuală Java)

Creatorii Java au vrut să fie WORA (Write Once Run Anywhere). Aceasta înseamnă că puteți rula aplicațiile sale pe orice platformă, dar lucrul care oferă Java această calitate este JVM. JVM-ul oferă mediul pentru a executa codul Java. Acesta interpretează bytecode și îl convertește în cod de mașină, astfel încât mașina să poată rula programul Java.

Încărcările JVM verifică și execută codul. De asemenea, oferă codului mediul de rulare, astfel încât să poată rula în mașină.

JRE (Java Runtime Environment)

JRE construiește un mediu de rulare în care puteți executa programele Java. Ia codul Java și îl combină cu bibliotecile necesare. JRE inițiază, de asemenea, JVM-ul pentru execuția acestuia. Java Runtime Environment are software-ul și bibliotecile necesare, astfel încât să puteți rula programele.

JDK (kit de dezvoltare Java)

Veți folosi JDK pentru a dezvolta aplicații și programe Java. Este un mediu de dezvoltare software și conține mai multe instrumente de dezvoltare, inclusiv JRE, un compilator, un interpret, un generator de documentație și un arhivator cu alții.

Componentele JVM

Acum că sunteți familiarizat cu arhitectura Java, să aruncăm o privire asupra componentelor JVM pentru a o înțelege mai bine. Deoarece JVM îndeplinește una dintre cele mai importante sarcini pentru Java, are multe părți în acest scop. Vom discuta fiecare element în detaliu:

Subsistemul ClassLoader

ClassLoader este un subsistem al mașinii virtuale Java care încarcă fișiere de clasă. Este prima componentă a arhitecturii, deoarece încarcă programul, astfel încât să poată avea loc alte sarcini. De asemenea, conectează și inițializează fișierele de clasă. Putem împărți activitatea sa în următoarele trei secțiuni:

Se încarcă

Această componentă încarcă clasele. Are BootStrap ClassLoader pentru încărcarea claselor care aparțin căii de clasă bootstrap. Extensia ClassLoader încarcă clasele situate în folderul ext, iar Application ClassLoader încarcă calea menționată Variabila de mediu și fișiere similare.

Legătura

Aici, subsistemul are un verificator pentru a verifica dacă bytecode este corect sau nu. Dacă bytecode nu este corect, va genera eroarea de verificare. Secțiunea de legare alocă toate memoria variabilelor statice și atribuie valorile implicite. De asemenea, înlocuiește referințele simbolice ale memoriei cu cele originale.

Inițializare

În această secțiune a ClassLoading, sistemul atribuie variabilele statice la valorile originale și execută blocul static.

Zona de date de rulare

Această secțiune a JVM-ului are următoarele componente:

Zona metodei

Zona metodei stochează toate datele la nivel de clasă. Fiecare JVM are o singură zonă de metodă.

Zona Heap

Zona heap stochează toate obiectele și matricele și variabilele de instanță ale acestora. La fel ca zona metodei, un JVM are o singură zonă heap.

Zona de stivă

Această secțiune creează stive unice de rulare pentru fiecare amenințare și face o intrare pentru fiecare apel de metodă în memoria stivei (cunoscută și ca Stack Frame). Are o matrice de variabile locale care este legată de metodă, stiva de operanzi, care acționează ca un spațiu de lucru pentru operațiuni intermediare și datele cadru, unde toate simbolurile legate de metodă rămân stocate. Datele cadru mențin informațiile blocului de captură, cu excepția cazului în care există o excepție.

Registre PC

Fiecare thread are registre PC separate care dețin adresa instrucțiunilor de rulare. Odată ce o instrucțiune a finalizat execuția, registrul PC-ului se actualizează cu următorul.

Stive de metode native

După cum sugerează și numele, această secțiune conține informații despre metoda nativă. Acesta creează o stivă unică de metode native pentru fiecare amenințare.

Trebuie să rețineți că primele două componente ale zonei de date de rulare (zona metodei și zona heap) sunt resurse partajate, în timp ce zona stivei nu este.

Motor de execuție

Motorul de execuție execută bytecode. Îl citește și îl execută bucată cu bucată. Are, de asemenea, diferite componente:

Interpret

Această componentă interpretează bytecode rapid, dar este puțin lent în execuție. Are un dezavantaj semnificativ ca atunci când sistemul apelează o metodă de mai multe ori și necesită o nouă interpretare de fiecare dată. Acest dezavantaj al interpretului dăunează substanțial eficienței procesului.

Compilatorul JIT

Compilatorul JIT nu are dezavantajul pe care îl are interpretul. Deci, atunci când Execution Engine găsește cod repetat, folosește compilatorul JIT în loc de interpret. Compilatorul JIT convertește bytecode în cod nativ după compilare. Sistemul folosește direct codul nativ.

Compilatorul JIT are generatorul de cod intermediar pentru producerea codului intermediar și optimizatorul de cod pentru optimizarea acestuia. Are, de asemenea, un generator de cod țintă care produce doe nativă și un profil care găsește hotspot-uri.

Colector de gunoi

Componenta finală a motorului de execuție este colectorul de gunoi care adună și scapă de obiectele nereferite. Puteți să-l declanșați apelând system.gc(), dar asta nu garantează execuția sa.

În afară de aceste componente, JVM-ul are și JNI (Java Native Interface) și Bibliotecile Native Method. Primul interacționează cu cel din urmă și oferă bibliotecile native necesare pentru execuție.

Obțineți un curs de dezvoltare software de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Gânduri finale

Am încercat să păstrăm acest articol concis și util și suntem încrezători că ați găsit acest articol informativ. Dacă aveți întrebări despre componentele JVM sau arhitectura Java, ne puteți întreba același lucru contactându-ne prin comentarii.

Puteți afla mai multe despre Java și aplicațiile sale pe blogul nostru. Avem numeroase ghiduri și articole utile care acoperă diverse aspecte ale acestui limbaj de programare robust.

Dacă sunteți interesat să aflați mai multe despre Java, OOP și dezvoltarea de software full-stack, consultați programul Executive PG de la upGrad și IIIT-B în dezvoltarea de software Full-stack, care este conceput pentru profesioniști care lucrează și oferă peste 500 de ore de formare riguroasă, Peste 9 proiecte și sarcini, statutul de absolvenți IIIT-B, proiecte practice practice și asistență pentru locuri de muncă cu firme de top.

Pregătiți-vă pentru o carieră a viitorului

Aplicați acum pentru masterat în inginerie software