Come configurare smartphone e PC. Portale informativo

Installazione su macchina Java. JVM (macchina virtuale Java)

Può essere compilato in bytecode Java, che può quindi essere eseguito dalla JVM.

La JVM è un componente chiave della piattaforma Java. Poiché le macchine virtuali Java sono disponibili per molte piattaforme hardware e software, Java può essere visto sia come un middleware che come una piattaforma autonoma, da qui il principio "scrivi una volta, esegui ovunque". L'utilizzo dello stesso bytecode per molte piattaforme consente a Java di essere descritto come "compila una volta, esegui ovunque".

Specifica JVM

Sole contro IBM

Nel 2001, con l'obiettivo di sviluppare uno standard per applicazioni desktop multipiattaforma, Eclipse.

IBM Visual Age. IBM è riuscita a bilanciare gli interessi della comunità libera e gli interessi del business (i loro interessi) in una Eclipse Public License riconosciuta dalla FSF.

Il progetto si sta sviluppando con successo, è riconosciuto dall'industria, è stato in gran parte trasformato da IBM in una Eclipse Foundation indipendente.


Fondazione Wikimedia. 2010.

Guarda cos'è la "Java Virtual Machine" in altri dizionari:

    Macchina virtuale Java- La parte principale dello spettacolo Sistemi Java(Ambiente di runtime Java; JRE). La Java Virtual Machine interpreta ed esegue il codice byte Java precedentemente generato dal codice sorgente di un programma Java da un compilatore Java. JVM può essere utilizzato per... - sviluppato da JavaSoft. Le applicazioni Web create utilizzandolo possono essere eseguite in modo nativo all'interno del sistema operativo, oppure programma di navigazione in rete o all'interno di un ambiente di emulazione noto come Java Virtual Machine... Dizionario di commercio elettronico

    - (JPF) strumento gratuito per testare programmi Java multi-thread. Al centro, questa è una macchina Java virtuale (Java Virtual Machine) sulla base della quale vengono implementati metodi di verifica del modello. Ciò significa che ... ... Wikipedia

    Macchina virtuale Java- Interprete di codice byte per programmi Java. Una macchina virtuale progettata per eseguire applet Java. La JVM è integrata nella maggior parte dei browser Web. Ciò consente di eseguire applet Java sul lato client, le cui chiamate sono fornite in ... ... Manuale tecnico del traduttore

    Un altro nome per questo concetto è "Java"; vedi anche altri significati. Da non confondere con JavaScript. Corso di lingua Java ... Wikipedia

    È necessario verificare la qualità della traduzione e allineare l'articolo alle regole stilistiche di Wikipedia. Puoi contribuire a migliorare questo articolo correggendo gli errori in esso contenuti. Originale n ... Wikipedia

La JVM è un componente chiave della piattaforma Java. La Java Virtual Machine interpreta ed esegue Java Bytecode precedentemente generato dal codice sorgente del programma Java dal compilatore Java (javac).

Poiché le macchine virtuali Java sono disponibili per molte piattaforme hardware e software, Java può essere visto sia come un middleware che come una piattaforma autonoma, da qui il principio "scrivi una volta, esegui ovunque". L'uso di un singolo bytecode per molte piattaforme consente a Java di essere descritto come "compila una volta, esegui ovunque" (compila una volta, esegui ovunque).

I programmi destinati all'esecuzione sulla JVM devono essere compilati in un formato binario portatile standard, che di solito è rappresentato come file .class. Un programma può essere costituito da molte classi collocate in file diversi. Per semplificare l'hosting di programmi di grandi dimensioni, alcuni dei file .class possono essere raggruppati in un cosiddetto file .jar (abbreviazione di Java Archive).

Macchina virtuale JVM che esegue file .classe o .vaso, emulando le istruzioni scritte per la JVM interpretando o utilizzando un compilatore JIT (just-in-time) come HotSpot dei microsistemi Sun. Al giorno d'oggi, la compilazione JIT viene utilizzata nella maggior parte delle JVM per ottenere una maggiore velocità. Esistono anche compilatori avanzati che consentono agli sviluppatori di applicazioni di precompilare i file di classe in codice nativo della piattaforma.

JVM, che è un'istanza di JRE (Java Runtime Environment), entra in azione quando viene eseguita Programmi Java. Dopo il completamento dell'esecuzione, questa istanza viene rimossa dal Garbage Collector. Il JIT è una parte della Java Virtual Machine che viene utilizzata per velocizzare il tempo di esecuzione delle applicazioni. JIT compila contemporaneamente parti del bytecode che hanno funzionalità simili e quindi riduce il tempo necessario per la compilazione.

JVM è una macchina stack. Ciò significa che non sono presenti registri per scopi generici e le operazioni vengono eseguite sui dati che si trovano nello stack. Questo scopo è servito dallo stack di operandi allocati in ogni frame. Quando si eseguono comandi Java bytecode che modificano i dati, gli operandi di tali comandi vengono selezionati dallo stack degli operandi ei risultati dei comandi vengono inseriti nello stesso stack.

Il runtime del metodo contiene le informazioni necessarie per l'associazione dinamica, la restituzione del metodo e la gestione delle eccezioni. Il codice della classe (posizionato nell'ambito della classe) accede a metodi e variabili esterni utilizzando collegamenti simbolici. Collegamento dinamico traduce i collegamenti simbolici in collegamenti reali. Il runtime contiene riferimenti alla tabella dei simboli del metodo attraverso la quale si accede a metodi e variabili esterni.

Il runtime contiene anche le informazioni necessarie per tornare da un metodo: un puntatore al frame del metodo chiamante, il valore del registro pc da restituire, il contenuto dei registri del metodo chiamante e un puntatore a un'area da memorizzare il valore di ritorno.

Le informazioni sulla gestione delle eccezioni contengono collegamenti alle sezioni sulla gestione delle eccezioni nel metodo class.

Il runtime accede anche ai dati contenuti nell'ambito della classe, comprese le costanti e le variabili di classe.

Le istruzioni JVM sono costituite da un codice operativo a un bit e possono contenere anche operandi. Il numero e la dimensione degli operandi sono determinati dall'opcode, alcune istruzioni non hanno operandi

Cos'è JVM?

JVM è un motore che fornisce un ambiente di runtime per guidare il codice Java o le applicazioni. Converte il bytecode Java in linguaggio macchina. JVM fa parte di JRE (Java Run Environment). Sta per Java Virtual Machine

  • In altri linguaggi di programmazione, il compilatore produce codice macchina per un particolare sistema. Tuttavia, il compilatore Java produce codice per una macchina virtuale nota come Java Virtual Machine.
  • Innanzitutto, il codice Java viene compilato in bytecode. Questo bytecode viene interpretato su macchine diverse
  • tra ospite sistema e Sorgente Java, Bytecode è un linguaggio intermedio.
  • JVM è responsabile dell'allocazione dello spazio di memoria.

In questo tutorial imparerai-

Architettura JVM

Comprendiamo l'architettura di JVM: contiene classloader, area di memoria, motore di esecuzione ecc.

1) Caricatore di classi

Il caricatore di classi è un sottosistema utilizzato per caricare i file di classe. Svolge tre funzioni principali vale a dire. Caricamento, collegamento e inizializzazione.

2) Area del metodo

L'area dei metodi JVM memorizza le strutture delle classi come i metadati, il pool di runtime costante e il codice per i metodi.

Tutti gli oggetti, le relative variabili di istanza e gli array sono archiviati nell'heap. Questa memoria è comune e condivisa su più thread.

4) Stack di lingua JVM

Gli stack in linguaggio Java memorizzano variabili locali e sono risultati parziali. Ogni thread ha il proprio stack JVM, creato contemporaneamente alla creazione del thread. Un nuovo frame viene creato ogni volta che viene richiamato un metodo e viene eliminato al termine del processo di chiamata del metodo.

5) Registri PC

Il registro del PC memorizza l'indirizzo dell'istruzione della macchina virtuale Java attualmente in esecuzione. In Java, ogni thread ha il proprio registro PC.

6) Stack di metodi nativi

Gli stack di metodi nativi contengono l'istruzione del codice nativo che dipende dalla libreria nativa. È scritto in un'altra lingua invece di Java.

7) Motore di esecuzione

È un tipo di software utilizzato per testare hardware, software o sistemi completi. Il motore di esecuzione del test non contiene mai alcuna informazione sul prodotto testato.

8) Interfaccia del metodo nativo

La Native Method Interface è un framework di programmazione. Consente al codice Java in esecuzione in una JVM di chiamare tramite librerie e applicazioni native.

9) Biblioteche di metodi nativi

Native Libraries è una raccolta di Native Libraries (C, C++) quali sono necessario per il motore di esecuzione.

Processo di compilazione ed esecuzione del codice software

Per scrivere ed eseguire un programma software, è necessario quanto segue

1) editore– Per digitare il tuo programma, è possibile utilizzare un blocco note

2) Compilatore– Per convertire il tuo programma di alta lingua in codice macchina nativo

3) Linker– Combinare diversi file di programma riferimento nel tuo programma principale insieme.

4) Caricatore– Per caricare i file dal tuo dispositivo di archiviazione secondario come disco rigido, Flash Drive, CD nella RAM per l'esecuzione. Il caricamento viene eseguito automaticamente quando si esegue il codice.

5) Esecuzione– Esecuzione effettiva del codice che viene gestito dal tuo sistema operativo e processore.

Con questo background, fare riferimento al seguente video e apprendere il funzionamento e l'architettura della Java Virtual Machine.

Codice C Processo di compilazione ed esecuzione

Per comprendere il processo di compilazione Java in Java. Prendiamo prima un sguardo veloce al processo di compilazione e collegamento in C.

Supponiamo in linea di massima di aver chiamato due funzioni f1 e f2. La funzione principale è memorizzata nel file a1.c.

La funzione f1 è memorizzata in un file a2.c

La funzione f2 è memorizzata in un file a3.c

Tutti questi file, ovvero a1.c, a2.c e a3.c, vengono inviati al compilatore. Il cui output sono i file oggetto corrispondenti che sono il codice macchina.

Il passaggio successivo consiste nell'integrare tutti questi file oggetto in un unico file .exe con il aiuto del linker. Il linker raggrupperà tutti questi file insieme e produrrà il file .exe.

Durante l'esecuzione del programma, un programma caricatore caricherà un.exe nella RAM per l'esecuzione.

Compilazione ed esecuzione di codice Java in Java VM

Diamo un'occhiata al processo per GIAVA. Nel tuo principale, hai due metodi f1 e f2.

  • Il metodo principale è memorizzato nel file a1.java
  • f1 è memorizzato in un file come a2.java
  • f2 è memorizzato in un file come a3.java

Il compilatore compilerà i tre file e produrrà 3 file .class corrispondenti che consistono in codice BYTE. A differenza di C, non viene eseguito alcun collegamento.

La Java VM o Java Virtual Machine risiede nella RAM. Durante l'esecuzione, utilizzando il caricatore di classi i file di classe vengono portati sulla RAM. Il codice BYTE viene verificato per eventuali violazioni della sicurezza.

Successivamente, il motore di esecuzione convertirà il Bytecode in codice macchina nativo. Questo è appena in tempo per la compilazione. È uno dei motivi principali per cui Java è relativamente lento.

NOTA: JIT o Il compilatore just-in-time è la parte della Java Virtual Machine (JVM). Interpreta parte del Byte Code che ha funzionalità simili allo stesso tempo.

Perché Java è sia Interpreted che Compiled Language?

I linguaggi di programmazione sono classificati come
  • Linguaggio di livello superiore Es. C++, Java
  • Lingue di medio livello Es. C
  • Assemblaggio ex lingua di basso livello
  • infine il livello più basso come Linguaggio Macchina.

UN compilatoreè un programma che converte un programma da un livello di linguaggio a un altro. Esempio di conversione del programma C++ in codice macchina.

Il compilatore java converte il codice java di alto livello in bytecode (che è anche un tipo di codice macchina).

Un interpreteè un programma che converte un programma a un livello in un altro linguaggio di programmazione al stesso livello. Esempio di conversione del programma Java in C++

In Java, il generatore Just In Time Code converte il bytecode nel codice macchina nativo che si trova agli stessi livelli di programmazione.

Quindi, Java è sia un linguaggio compilato che interpretato.

Perché Java è lento?

Le due ragioni principali alla base della lentezza di Java sono

  1. Collegamento dinamico: A differenza di C, il collegamento viene eseguito in fase di esecuzione, ogni volta che il programma viene eseguito in Java.
  2. Interprete di runtime: La conversione del codice byte in codice macchina nativo viene eseguita in fase di esecuzione in Java, il che rallenta ulteriormente la velocità

Tuttavia, l'ultima versione di Java ha affrontato in larga misura i colli di bottiglia delle prestazioni.

Sommario:

  • JVM o Java Virtual Machine è il motore che guida il codice Java. Converte il bytecode Java in linguaggio macchina.
  • In JVM, il codice Java viene compilato in bytecode. Questo bytecode viene interpretato su macchine diverse
  • Il compilatore JIT o Just-in-time fa parte della Java Virtual Machine (JVM). Serve per velocizzare il tempo di esecuzione
  • Rispetto ad altre macchine compilatrici, Java potrebbe essere lento nell'esecuzione.
JVM (Java Virtual Machine) - la base del linguaggio Programmazione Java. Ambiente Java si compone di cinque elementi:
■ Linguaggio Java
■ Definizione bytecode
■ Librerie di classi Java/Sun
■ Macchina virtuale Java
■ La struttura del file .class

Di tutti questi cinque elementi, gli elementi che hanno portato al successo di Java
■ Definizione bytecode,
■ la struttura del file .class,
■ e la Java Virtual Machine.

Quindi "scrivi una volta ed esegui ovunque" è stato effettivamente reso possibile dalla portabilità del file .class, che aiuta l'esecuzione su qualsiasi computer o chipset utilizzando Java Virtual Machine.

1.3.1 Che cos'è la Java Virtual Machine?

Una macchina virtuale è un software basato sui concetti e sull'idea di un computer immaginario che ha un insieme logico di istruzioni e istruzioni che determinano le operazioni di quel computer. È un piccolo sistema operativo, si potrebbe dire. Lei modella livello richiesto astrazione, dove si ottiene l'indipendenza dalla piattaforma, l'attrezzatura utilizzata.

Il compilatore converte testo di partenza in un codice basato sul set di istruzioni immaginarie del computer e indipendente dalla specificità del processore. Un interprete è un'applicazione che comprende questi flussi di comandi e traduce questi comandi per l'hardware sottostante a cui appartiene l'interprete. La JVM crea internamente un sistema di runtime, che aiuta l'esecuzione del codice quando
■ caricamento di file .class,
■ gestione della memoria
■ esecuzione della gestione delle eccezioni.

A causa dell'incoerenza delle piattaforme hardware, la macchina virtuale utilizza il concetto di stack, che contiene le seguenti informazioni:
■ Descrittori dello stato del metodo
■ Operandi in bytecode
■ Parametri del metodo
■ Variabili locali

Quando il codice viene eseguito dalla JVM, è presente un registro speciale utilizzato come contatore, che indica i comandi attualmente in esecuzione. Se necessario i comandi cambiano il programma, cambiano il flusso di esecuzione, altrimenti il ​​flusso è sequenziale e salta da un comando all'altro.

Un'altra nozione che sta diventando popolare è l'uso del compilatore Just In Time (JIT). Browser come Netscape Navigator 4.0 e Internet Explorer 4.0 includono compilatori JIT che velocizzano l'esecuzione dei codici Java. L'obiettivo principale di JIT è convertire il set di istruzioni del bytecode in istruzioni del codice macchina destinate a un particolare microprocessore. Questi comandi vengono archiviati e utilizzati ogni volta che viene effettuata una richiesta a quel particolare metodo.

1.3.2 Ambiente di runtime Java

JVM JRE (Java Runtime Environment) che interagisce con l'hardware da un lato e il software dall'altro. JRE esegue il codice compilato per JVM:
Caricamento di file .class
Fatto con "Classloader"
Il caricatore di classi esegue un controllo di sicurezza se i file vengono utilizzati nella rete.
Verifica del bytecode
Eseguito da "bytecode verificatore"
Il verificatore di bytecode controlla il formato del codice, le conversioni del tipo di oggetto e verifica le violazioni di accesso.
Esecuzione del codice
Fatto da "interprete in fase di esecuzione"
L'interprete esegue i bytecode e fa richieste per l'hardware utilizzato.


Figura 1.3: Ambiente runtime Java

1.3.3 Gestione delle eccezioni e gestione della memoria

In C, C++ o Pascal, i programmatori usavano i metodi primitivi per allocare e liberare blocchi di memoria: la memoria dinamica. La memoria dinamica è un grande pezzo di memoria, che è indicato nella quantità di tutta la memoria.

La memoria dinamica viene utilizzata:
Elenco di blocco gratuito
Elenco di blocchi distribuito

L'elenco libero controlla il blocco di memoria ogni volta che viene effettuata una richiesta. Viene utilizzato un meccanismo di allocazione: "il metodo del primo blocco corrispondente", per cui il primo blocco di memoria più piccolo viene allocato a seconda della richiesta. Questa procedura alloca e libera piccole quantità di memoria di varie dimensioni dalla memoria dinamica, riducendo al minimo la frammentazione della memoria dinamica.

C'è una fase in cui viene effettuata una richiesta di memoria - per ottenere un blocco di memoria più grande di quello disponibile. In questi casi, il gestore area dinamica deve creare più memoria. Questa tecnica è chiamata compattazione. Questo è il processo mediante il quale tutti i blocchi di memoria disponibili liberi vengono raggruppati insieme spostandosi memoria libera un'estremità della memoria dinamica, creando così un grande blocco di memoria.

La Java Virtual Machine utilizza due memorie dinamiche separate per l'allocazione della memoria statica e dinamica.

Memoria dinamica: non esegue la gestione dinamica delle eccezioni della memoria, che conserva tutte le proprietà della classe, il pool di costanti e le tabelle dei metodi.

La seconda memoria dinamica è nuovamente divisa in due sezioni, che possono essere ampliate direzioni opposte Quando richiesto. Una sezione viene utilizzata per archiviare le istanze di oggetti e l'altra sezione viene utilizzata per archiviare gli handle di tali istanze. Un descrittore è una struttura composta da due puntatori. Punta alla tabella dei metodi di un oggetto e altri elementi all'istanza di quell'oggetto. Questo posizionamento elimina sostanzialmente la necessità di salvare percorsi che puntano a un oggetto quando si modificano i puntatori dopo la compattazione. Tutto quello che dobbiamo fare è aggiornare il valore del puntatore del descrittore.

L'algoritmo di gestione delle eccezioni viene applicato agli oggetti inseriti nella memoria dinamica. Poiché viene ricevuta una richiesta per un blocco di memoria, il gestore dell'area dinamica controlla prima l'elenco libero e se il gestore dell'area dinamica non riesce a trovare blocchi di memoria liberi, la gestione delle eccezioni viene invocata non appena il sistema è rimasto inattivo per un periodo sufficiente di volta. Nei casi in cui le applicazioni sono altamente interattive e il tempo di inattività del sistema è ridotto al minimo, la gestione delle eccezioni deve essere richiamata esplicitamente dall'applicazione.

Il raccoglitore di eccezioni chiama il metodo di terminazione prima che l'istanza dell'oggetto venga raccolta utilizzando la gestione delle eccezioni. Il metodo di terminazione viene utilizzato per cancellare risorse esterne come file e flussi aperti e non curati elaborazione standard eccezioni. Anche se invochiamo esplicitamente il metodo di gestione delle eccezioni (System.gc()), questo non funzionerà rapidamente. È solo pensato per funzionare. Significa anche che non è possibile chiamare la gestione delle eccezioni. Ciò è dovuto al fatto che i thread di gestione delle eccezioni vengono eseguiti con una priorità molto bassa e possono essere interrotti frequentemente. Questo può accadere quando il nostro oggetto non è mai stato precedentemente localizzato in memoria.

Articoli correlati in alto