Spiegazione dell'architettura e dei componenti Java [2022]

Pubblicato: 2021-01-04

Prima di diventare un programmatore Java, devi comprendere ogni aspetto di questo linguaggio. Uno degli aspetti più cruciali di Java è l'architettura Java. Un altro argomento tecnico a questo proposito è conoscere i componenti di JVM. Quindi, tratteremo entrambi questi argomenti critici in questo articolo.

Questo articolo presuppone che tu abbia una conoscenza generale delle basi di Java. Anche se non hai familiarità con i fondamenti di Java, puoi porre qualsiasi domanda tu possa avere nella sezione commenti qui sotto. Iniziamo:

Sommario

Spiegazione dell'architettura Java

Java ha due processi, compilazione e interpretazione. Il compilatore Java converte il codice presente in Java in codici byte. La Java Virtual Machine (JVM) converte i codici byte in codice macchina che la macchina esegue direttamente.

Possiamo descrivere questo processo nei seguenti passaggi:

  • Il codice sorgente va al compilatore Java
  • Il compilatore Java lo converte in codici byte
  • I codici byte vanno alla Java Virtual Machine
  • Infine, va al sistema operativo (sistema operativo)

Ora che abbiamo un po' di familiarità con il funzionamento dell'architettura Java, possiamo dare un'occhiata ai suoi diversi componenti:

JVM (macchina virtuale Java)

I creatori di Java volevano che fosse WORA (Write Once Run Anywhere). Ciò significa che puoi eseguire le sue applicazioni su qualsiasi piattaforma, ma la cosa che dà a Java questa qualità è JVM. La JVM fornisce l'ambiente per eseguire il codice Java. Interpreta il bytecode e lo converte in codice macchina in modo che la macchina possa eseguire il programma Java.

I carichi JVM verificano ed eseguono il codice. Fornisce inoltre l'ambiente di runtime al codice in modo che possa essere eseguito nella macchina.

JRE (ambiente di runtime Java)

JRE crea un ambiente di runtime in cui è possibile eseguire i programmi Java. Prende il codice Java e combina lo stesso con le librerie richieste. Il JRE avvia anche la JVM per la sua esecuzione. Java Runtime Environment ha il software e le librerie necessari in modo da poter eseguire i programmi.

JDK (Kit di sviluppo Java)

Utilizzeresti il ​​JDK per sviluppare app e programmi Java. È un ambiente di sviluppo software e contiene più strumenti di sviluppo tra cui JRE, un compilatore, un interprete, un generatore di documentazione e un archiviatore con altri.

Componenti di JVM

Ora che hai familiarità con l'architettura Java, diamo un'occhiata ai componenti di JVM in modo da poterla capire meglio. Poiché la JVM esegue una delle attività più cruciali per Java, ha molte parti a tale scopo. Discuteremo ogni elemento in dettaglio:

Sottosistema ClassLoader

ClassLoader è un sottosistema della Java Virtual Machine che carica i file di classe. È il primo componente dell'architettura in quanto carica il programma in modo che possano essere eseguite altre attività. Collega e inizializza anche i file di classe. Possiamo suddividere il suo funzionamento nelle seguenti tre sezioni:

Caricamento in corso

Questo componente carica le classi. Ha il BootStrap ClassLoader per caricare le classi appartenenti al percorso di classe bootstrap. L'Extension ClassLoader carica le classi situate all'interno della cartella ext e l'Application ClassLoader carica il percorso indicato con la variabile d'ambiente e file simili.

Collegamento

Qui, il sottosistema ha un verificatore per verificare se il bytecode è corretto o meno. Se il bytecode non è corretto, genererà l'errore di verifica. La sezione di collegamento alloca la memoria di tutte le variabili statiche e assegna i valori di default. Sostituisce anche i riferimenti simbolici della memoria con quelli originali.

Inizializzazione

In questa sezione di ClassLoading, il sistema assegna le variabili statiche ai valori originali ed esegue il blocco statico.

Area dati di runtime

Questa sezione della JVM ha i seguenti componenti:

Area metodo

L'area del metodo memorizza tutti i dati a livello di classe. Ogni JVM ha una sola area di metodo.

Area del mucchio

L'area dell'heap memorizza tutti gli oggetti e le relative matrici e variabili di istanza. Come l'area del metodo, una JVM ha solo un'area di heap.

Area della pila

Questa sezione crea stack di runtime univoci per ogni minaccia e crea una voce per ogni chiamata di metodo nella memoria dello stack (nota anche come Stack Frame). Ha un Local Variable Array correlato al metodo, lo stack degli operandi, che funge da spazio di lavoro per le operazioni intermedie, e i dati del frame, in cui rimangono memorizzati tutti i simboli relativi al metodo. I dati del frame mantengono le informazioni sul blocco catch a meno che non ci sia un'eccezione.

Registri PC

Ogni thread ha registri PC separati che contengono l'indirizzo delle istruzioni in esecuzione. Una volta completata l'esecuzione di un'istruzione, il registro del PC si aggiorna con quello successivo.

Stack di metodi nativi

Come suggerisce il nome, questa sezione contiene informazioni sul metodo nativo. Crea uno stack di metodi nativo unico per ogni minaccia.

Si noti che i primi due componenti dell'area dei dati di runtime (area del metodo e area dell'heap) sono risorse condivise mentre l'area dello stack non lo è.

Motore di esecuzione

Il motore di esecuzione esegue il bytecode. Lo legge e lo esegue pezzo per pezzo. Ha anche diversi componenti:

Interprete

Questo componente interpreta il bytecode rapidamente ma è un po' lento nell'esecuzione. Ha uno svantaggio significativo come quando il sistema chiama un metodo più volte e richiede ogni volta una nuova interpretazione. Questo inconveniente dell'interprete pregiudica sostanzialmente l'efficienza del processo.

Compilatore JIT

Il compilatore JIT non ha lo svantaggio dell'interprete. Pertanto, quando Execution Engine trova codice ripetuto, utilizza il compilatore JIT anziché l'interprete. Il compilatore JIT converte il bytecode in codice nativo dopo averlo compilato. Il sistema utilizza direttamente il codice nativo.

Il compilatore JIT ha il generatore di codice intermedio per la produzione di codice intermedio e l'ottimizzatore di codice per l'ottimizzazione dello stesso. Ha anche un generatore di codice di destinazione che produce la cerva nativa e un profilo che trova gli hotspot.

Netturbino

Il componente finale dell'Execution Engine è il Garbage Collector che raccoglie ed elimina gli oggetti non referenziati. Puoi attivarlo chiamando system.gc() ma ciò non ne garantisce l'esecuzione.

Oltre a questi componenti, la JVM ha anche JNI (Java Native Interface) e Native Method Libraries. Il primo interagisce con il secondo e fornisce le biblioteche native necessarie per l'esecuzione.

Ottieni il corso di sviluppo software dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Pensieri finali

Abbiamo cercato di mantenere questo articolo conciso e utile e siamo fiduciosi che tu l'abbia trovato informativo. Se hai domande sui componenti di JVM o sull'architettura Java, puoi chiederci lo stesso contattandoci tramite commenti.

Puoi saperne di più su Java e le sue applicazioni sul nostro blog. Abbiamo numerose guide e articoli utili che coprono vari aspetti di questo robusto linguaggio di programmazione.

Se sei interessato a saperne di più su Java, OOP e lo sviluppo di software full-stack, dai un'occhiata al programma Executive PG di upGrad e IIIT-B in Full-stack Software Development, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, Oltre 9 progetti e incarichi, stato di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Prepararsi per una carriera del futuro

Candidati ora per un Master in Ingegneria del Software