2010-09-15 14 views
19

Non sono riuscito a trovare la differenza tra JIT e Interpreti.JIT vs interpreti

Jit è un intermediario per interpreti e compilatori. Durante il runtime, converte il codice byte in codice macchina (JVM o Actual Machine?) Per la prossima volta, prende dalla cache ed esegue Ho ragione?

Gli interpreti eseguiranno direttamente bytecode senza trasformarlo in codice macchina. È giusto?

Come il vero processore del nostro PC capirà le istruzioni.?

Si prega di chiarire i miei dubbi.

risposta

8

A JIT Compiler traduce il codice byte in codice macchina e quindi esegue il codice macchina.

Interpreters legge il linguaggio di alto livello (lo interpreta) ed esegue ciò che viene richiesto dal programma. Gli interpreti normalmente non passano attraverso il codice byte e la compilazione jit.

Ma i due mondi si sono sciolti perché numerosi interpreti hanno imboccato la strada verso la compilazione di byte interna e la compilazione di jit, per una migliore velocità di esecuzione.

15

Jit è un intermediario per interpreti e compilatori. Durante il runtime, converte il codice byte in codice macchina (JVM o Actual Machine?) Per la prossima volta, prende dalla cache ed esegue Am i right?

Sì.

Gli interpreti eseguiranno direttamente bytecode senza trasformarlo in codice macchina. È giusto?

Sì, lo è.

Come il vero processore del nostro PC capirà le istruzioni.?

Nel caso di interpreti, la macchina virtuale esegue una procedura JVM nativa corrispondente a ciascuna istruzione in byte code per produrre il comportamento previsto. Ma il tuo codice non è in realtà compilato in codice nativo, come con i compilatori Jit. La JVM emula il comportamento previsto per ciascuna istruzione.

0

Sono quasi sicuro che JIT trasforma il codice byte in codice macchina per qualsiasi macchina su cui stai lavorando proprio come è necessario. L'alternativa a questo è di eseguire il codice byte in una macchina virtuale java. Non sono sicuro se questo equivale a interpretare il codice poiché sono più familiare con quel termine usato per descrivere l'esecuzione di un linguaggio di scripting (non compilato) come ruby ​​o perl.

17
  • Interprete: Legge il codice sorgente o qualche rappresentazione intermedia (bytecode) di esso, e lo esegue direttamente .

  • Compilatore JIT: legge il codice sorgente, o più in genere una rappresentazione intermedia (bytecode), lo compila al volo ed esegue il codice nativo.

-1

La prima volta che una classe è fatto riferimento in JVM JIT motore di esecuzione ri-compila i file .class (binari primari) generati dal compilatore Java che contengono JVM set di istruzioni di file binari contenenti Instruction Set del sistema host. JIT memorizza e riutilizza quei binari ricompilati dalla memoria andando avanti, riducendo i tempi di interpretazione e i benefici derivanti dall'esecuzione del codice nativo.

E c'è un altro sapore che fa Adaptive Optimization identificando la maggior parte della parte riutilizzata dell'app e applicando solo JIT su di esso, ottimizzando l'utilizzo della memoria.

D'altra parte un semplice vecchio interprete Java interpreta una istruzione JVM dal file di classe alla volta e chiama una procedura contro di essa.

trovare un confronto dettagli here

9

Per prima cosa:
Con JVM, sia interprete e compilatore (il compilatore JVM e non il codice sorgente del compilatore come javac) producono codice nativo (alias codice lingua Machine per la CPU fisica sottostante come x86) dal codice byte.

Qual è la differenza, allora:
La differenza sta nel modo in cui generare il codice nativo, come ottimizzato è bene quanto costoso l'ottimizzazione è. Informalmente, un interprete praticamente converte ogni istruzione di codice byte in corrispondente istruzione nativa cercando una istruzione JVM predefinita per mappare le istruzioni della macchina (vedi foto sotto). È interessante notare che è possibile ottenere un'ulteriore accelerazione nell'esecuzione, se prendiamo una sezione di byte-code e la convertiamo in codice macchina, perché considerando un'intera sezione logica spesso fornisce spazio per l'ottimizzazione anziché la conversione (nell'interpretazione di) ogni riga in isolamento (alle istruzioni della macchina). Questo stesso atto di convertire una sezione di byte-code in istruzioni (presumibilmente ottimizzate) della macchina si chiama compilazione (nel contesto corrente). Quando la compilazione viene eseguita in fase di esecuzione, il compilatore viene chiamato compilatore JIT.

enter image description here

Il co-relazione e coordinamento:
Dal Java progettista è andato per (hardware & OS) Architettura interprete portabilità, che avevano scelto (al contrario di c stile compilazione, assemblaggio e collegamento). Tuttavia, al fine di ottenere più velocità, un compilatore è anche facoltativamente aggiunto a una JVM. Tuttavia, mentre un programma continua ad essere interpretato (ed eseguito in CPU fisica), gli "hotspot" vengono rilevati da JVM e vengono generate le statistiche. Di conseguenza, utilizzando le statistiche dell'interprete, queste sezioni diventano candidate alla compilazione (codice nativo ottimizzato). Viene infatti eseguito al volo (quindi compilatore JIT) e le istruzioni della macchina compilate vengono utilizzate successivamente (anziché essere interpretate). In modo naturale, JVM memorizza anche questi pezzi di codice compilati.

Qualche parola di avvertimento:
Questi sono più o meno i concetti fondamentali. Se un vero implementatore di JVM, fa un modo leggermente diverso, non stupirti. Quindi potrebbe essere il caso di VM in altre lingue.

Qualche parola di avvertimento:
Affermazioni come "interprete esegue il codice byte nel processore virtuale", "interprete esegue il codice di byte direttamente", ecc, sono tutti corretti fino a quando si capisce che alla fine c'è un set delle istruzioni della macchina che devono essere eseguite in un hardware fisico.

Alcune buone referenze: [non hanno fatto un'ampia ricerca anche se]

  • [carta] Istruzione pieghevole in un hardware-Traduzione basata su Java virtuale Machine di Hitoshi Oi
  • [libro ] Organizzazione e progettazione informatica, 4a edizione, DA Patterson. (vedere Fig 2.23)
  • [web-articolo] ottimizzazione delle prestazioni JVM, Parte 2: compilatori, da Eva Andreasson (JavaWorld)

PS: ho usato termini seguenti interchangebly - 'codice nativo ',' codice lingua macchina ',' istruzioni macchina ', ecc.