Ok, ho letto diverse discussioni riguardanti le differenze tra gli interpreti abilitati JIT e non JIT e perché JIT di solito aumenta le prestazioni.Do not Both Gli interpreti abilitati JIT e non JIT producono in modo definitivo il codice macchina
Tuttavia, la mia domanda è:
In ultima analisi, non un non-JIT abilitato interprete deve girare bytecode (riga per riga) in codice macchina/nativo da eseguire, proprio come un compilatore JIT farà ? Ho visto post e libri di testo che dicono di sì, e post che dicono di no. L'ultimo argomento è che l'interprete/JVM esegue questo bytecode direttamente senza alcuna interazione con codice macchina/nativo.
Se interpreti non JIT fanno girare ogni riga in codice macchina, sembra che i principali vantaggi di JIT sono ...
L'intelligenza di caching o tutti (JIT normale) o frequente riscontro (hotspot/ottimizzazione adattiva) parti del bytecode in modo che la fase di compilazione del codice macchina non sia necessaria ogni volta.
Qualsiasi compilatore JIT di ottimizzazione può eseguire nella conversione di codice in codice macchina.
È preciso? Sembra che ci sia poca differenza (diversa dall'ottimizzazione possibile, o blocchi JITtari o linea per linea) tra la traduzione del bytecode e il codice macchina tramite interpreti abilitati JIT e JIT.
Grazie in anticipo.
Grazie per la risposta! Stavo leggendo il libro "Partire con i giochi e la grafica in C++" e si menziona "L'interprete traduce ogni istruzione di alto livello nelle sue equivalenti istruzioni in linguaggio macchina e la esegue immediatamente". È qui che è iniziata la confusione. Tuttavia, si trattava di interpreti in generale. –
Un interprete "traduce" i comandi di alto livello sul linguaggio macchina passando/saltando su una sezione del linguaggio macchina che implementa l'operazione rappresentata dal comando di alto livello. –