Arhitectura mașinii virtuale Java

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

1leftarrow blue.svg Element principal: mașină virtuală Java .

Arhitectura mașinii virtuale Java poate fi împărțită după cum urmează:

Mașina virtuală Java

Pictogramă lupă mgx2.svg Același subiect în detaliu: mașină virtuală Java .

Scopul mașinii virtuale Java este de a găsi o modalitate de a scrie și distribui software . În prezent, lumea computerelor este împărțită, pe de o parte, în mai multe tipuri de limbaje de programare și, pe de altă parte, prin dezvoltarea enormă a internetului, care confruntă programatorii cu problema partajării codului. Datorită flexibilității, simplității și securității, Java este util pentru programarea pe internet și a preluat rolul unei platforme centrale.

Cod byt Java

Codul sursă Java este compilat în bytecode și stocat în fișiere cu extensia .class . Pentru a compila acest cod, este furnizat un instrument numit Javac . Acest instrument nu este considerat un compilator tradițional tocmai pentru că traduce codul sursă în bytecode. Codul, datorită formatului, nu poate fi executat direct, ci trebuie interpretat pe fiecare computer . Portabilitatea extremă și flexibilitatea codului Java sunt date, de fapt, de acest pas intermediar.

Un bytecode instrucțiune constă dintr - un o- octet opcode , care servește la identificarea instrucțiunii în cauză, și zero sau mai multe operanzilor , fiecare dintre care poate fi mai mult de un octet. Când operanzii sunt mai lungi de un octet, big-endianul (octetul de ordine înaltă) este stocat mai întâi, acești operanzi sunt apoi asamblate din fluxul de octeți în timpul rulării. De exemplu, un parametru de 16 biți este reprezentat în fluxul de instrucțiuni de doi octeți. Setul de instrucțiuni al mașinii virtuale Java interpretează datele din zonele de memorie de execuție ca aparținând unui set predeterminat de tipuri : tipuri primitive, care sunt reprezentate de mai multe tipuri întregi semnate (octet, scurt, int, lung), un tip întreg nesemnat (char ), două tipuri cu virgulă mobilă (float și dublu), plus tipul care face referire la un obiect ( indicator pe 32 de biți).

Registrele

Registrele mașinii virtuale Java sunt similare cu registrele găsite într-un computer real, conțin starea în care se află mașina în timpul operațiunilor, afectează funcționarea acesteia din urmă și sunt actualizate după executarea fiecărui bytecode .

Mașina virtuală Java include următoarele registre:

  • pc - contorul de program , indică bytecode-ul care urmează să fie executat.
  • vars - un indicator către prima variabilă locală a metodei în curs de executare.
  • cadru - un indicator către mediul de execuție al metodei curente care se execută.
  • optop - un indicator către partea de sus a teancului de operanzi, folosit pentru a evalua toate expresiile aritmetice.

Lățimea cu care Java definește aceste registre este de 32 de biți. Fiind bazată pe stivă, mașina virtuală nu folosește registre pentru transmiterea sau preluarea argumentelor; ceea ce i-a determinat pe programatori să opteze pentru această alegere a fost simplitatea și compactitatea bytecodurilor care favorizează implementarea mașinii virtuale pe arhitecturi cu puține registre.

Grămadă

Stiva , care stă la baza funcționării mașinii virtuale Java, este utilizată pentru a transmite parametrii instrucțiunilor pe măsură ce sunt executate și pentru a primi rezultatele de la aceste produse. Un cadru de stivă Java este asociat cu un cadru de stivă de limbaj de programare convențional. Fiecare cadru conține informații asociate cu unul dintre apelurile metodei stivuite.

Fiecare cadru de stivă are trei zone (care pot fi, de asemenea, goale):

  • Variabile locale pentru apelul metodei
  • Mediul de execuție al metodei în sine
  • Stiva de operanzi

Nu confundați stiva de apeluri a metodei cu stiva de operand. Acesta din urmă funcționează independent de celălalt. Singura corelație dintre cele două este că a doua este gestionată într-o zonă de memorie din cadrul cadrelor care sunt prezente în prima. Foarte simplist, am putea spune că avem de-a face cu o stivă pe stivă.

Zona grămezii

Termenul heap se referă la acel site de memorie în care sunt alocate obiecte nou create. Când JVM pornește, o anumită zonă de memorie (mai mare sau mai mică în funcție de implementarea mașinii virtuale) este adesea alocată heap-ului. Unele implementări alocă o cantitate mare de memorie heap-ului chiar de la început, păstrând această cantitate constantă pe tot parcursul executării programului; altele permit ca această zonă să se extindă atât cât este permis de mediul de execuție (printre factorii care afectează această sumă sunt setările sistemului de operare și disponibilitatea efectivă a memoriei pe mașina care rulează programul). Colectorul de gunoi este responsabil pentru îndepărtarea obiectelor care nu mai sunt folosite de program pe măsură ce rulează. Acest lucru permite programatorilor să se elibereze de sarcina de a elibera „manual” (prin inserarea instrucțiunilor corespunzătoare în codul sursă) memoria alocată pentru un obiect atunci când acesta din urmă și-a epuizat funcția în program. Această sarcină este chiar obligatorie în limbi precum C ++ . De fapt, colectorul de gunoi a fost conceput tocmai pentru a evita acele erori în timpul rulării care derivă din nealocarea memoriei neutilizate sau din încercarea de alocare a memoriei încă folosite de program.

Zona de depozitare a metodei

Zona de stocare a metodelor conține tabelele de simboluri necesare pentru conectarea dinamică, informații suplimentare de depanare , medii de dezvoltare pentru a se asocia cu implementarea oricărei metode și codurile secundare Java care implementează toate metodele prezente în sistem. Deoarece codurile de octet sunt stocate ca un flux de octeți, zona metodei este aliniată pe octeți, în timp ce celelalte zone sunt aliniate pe cuvânt pe 32 de biți.

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT