2013-05-08 7 views
24

Sono davvero fatica a capire la cosa seguenteQual è l'uso di JVM se JIT è di eseguire la conversione bytecode di istruzioni macchina

In precedenza lo so:

Quando un programma Java viene compilato verrà generato .class di file . In quel codice è sotto forma di byte. Quindi lo JVM tradurrà quel codice byte in un formato comprensibile dalla macchina.

Ora vedo in one of the questions in SO

A Just-In-Time (JIT) è una caratteristica della fase di esecuzione interprete, che invece di interpretare il bytecode ogni volta un metodo viene richiamato, sarà compilare il bytecode in codice macchina istruzioni della macchina che esegue

Così qui JIT è la conversione del bytecode di istruzioni macchina. Allora a cosa serve JVM. Siamo in grado di farlo con JIT. A mia conoscenza, il JIT è solo per migliorare le prestazioni di JVM.

Grazie in anticipo ..

risposta

2

Per essere chiari:

JVM esegue tutto come:

Rimane sulla parte superiore del sistema operativo e fornisce l'astrazione tra il programma Java compilato e sistema operativo. In questo modo, il programma compilato java non deve preoccuparsi della piattaforma su cui deve lavorare . Il programma Java compila il codice in bytecode che JVM può comprendere ed eseguire.

JIT

Quando JVM compila il file di classe, ma non completa il file completo di classe ; ne compila solo una parte in base alle necessità. Questo evita pesanti analisi del codice sorgente completo. Questo tipo di compilation viene definito come compilazione JIT o Just-In-Time . JVM è Platform generazione di codice (OS) in funzione JIT è Platform Oriented, genera il codice di byte nativo, quindi è più veloce di una JVM :)

+0

Ma vedo l'istruzione JIT compila l'intero file di classe una volta.Ma nella tua dichiarazione jvm sta facendo la compilazione.Si prega di spiegare – Anusha

+0

@Anusha yah ... JVM fa la compilazione [riga per riga] un interprete nativo per java..but JIT è opzionale, che compila anche, non tutto solo i metodi/le funzioni necessari. Per un caso considerare: Il compilatore JIT non controlla le condizioni al contorno Java come le eccezioni del puntatore Null o della matrice fuori dai limiti. L'unico modo in cui il compilatore JIT sa di avere un'eccezione di puntatore nullo è un segnale generato dal sistema operativo. –

+0

Questo è semplicemente sbagliato. Il compilatore Java javac analizza il codice sorgente Java e lo compila su bytecode Java (indipendente dalla macchina), i tuoi file .class. Il compilatore JIT compila quel codice bytecode al codice macchina nativo (specifico dell'architettura della CPU). Il codice macchina di output JIT esegue ancora il controllo dei limiti e la gestione delle eccezioni Java. – arjunyg

1

Compila appena in tempo per la JVM con le ottimizzazioni.

21

Il JIT è solo parte di la JVM. Altre parti includono l'interprete bytecode, i meccanismi di verifica del caricamento della classe e di collegamento e il supporto del codice nativo per cose come la riflessione, l'I/O e così via.

In questo senso, il JIT non rende la JVM più veloce. Invece rende codice Java eseguito più veloce ... di quanto sarebbe se la JVM lo interpretasse.

In realtà, la JVM fa inizia a interpretare i bytecode.Dopo un certo periodo, la JVM utilizza quindi il compilatore JIT per compilare i metodi più utilizzati nel codice nativo, utilizzando le statistiche raccolte durante l'interpretazione per ottimizzare il codice per il problema in questione.

Tra l'altro, questa parte del testo che hai citato è goffo e tecnicamente inaccurate:

A Just-In-Time (JIT) è una caratteristica del run-time interprete ... (context)

In effetti, la JIT non è una caratteristica dell'interprete. Piuttosto, il JIT è la funzionalità della JVM che funziona insieme all'interprete.

0

La Java Virtual Machine (JVM) fornisce l'intero ambiente per l'esecuzione di un programma Java. Si integra con il sistema operativo, carica le classi ed esegue i programmi. Il compilatore Just-In-Time (JIT) è solo un piccolo pezzo che può essere disabilitato (-Xint) ma, se abilitato, fornisce un utile miglioramento delle prestazioni. Ci sono state implementazioni della JVM che non includevano un JIT e implementazioni che funzionavano pre-compilando Java per codificare il codice esattamente come i linguaggi tradizionali, come C o C++.

Problemi correlati