La JVM è un compilatore o un interprete?


Ho una domanda molto basilare su JVM: è un compilatore o un interprete?

Se è un interprete, allora che dire del compilatore JIT che esiste all'interno della JVM?
Se nessuno dei due, allora cos'è esattamente la JVM? (Non voglio la definizione di base di jVM di convertire il codice byte in codice specifico della macchina, ecc.)

Author: Mat, 2011-10-06

7 answers

Per prima cosa, abbiamo un'idea chiara dei seguenti termini

Javac is Java Compiler Comp compila il tuo codice Java in Bytecode

JVM Java Virtual Machine Runs esegue / interpreta / traduce il Bytecode in Codice macchina nativo

JIT is Just In Time Compiler Comp compila la sequenza di istruzioni bytecode data al codice macchina in runtime prima di eseguirlo in modo nativo. Il suo scopo principale è quello di fare ottimizzazioni pesanti in termini di prestazioni.

Così ora, Cerchiamo di trovare le risposte alle vostre domande..

1)JVM: is it a compiler or an interpreter? -- Ans: Interprete

2)what about JIT compiler that exist inside the JVM? -- Ans: Se leggi questa risposta completamente, probabilmente la sai ora

3)what exactly is the JVM? -- Ans:

  • JVM è una piattaforma virtuale che risiede sulla RAM
  • Il suo componente, Class loader carica il file .class nella RAM
  • Il componente Byte code Verifier nella JVM controlla se ci sono violazioni delle restrizioni di accesso nel tuo codice. (Questo è uno dei motivi principali per cui java è sicuro)
  • Successivamente, il componente Execution Engine converte il Bytecode in codice macchina eseguibile

Spero che questo ti abbia aiutato..

 127
Author: Srikanth Bandaru, 2013-02-05 13:26:40

È un po ' di entrambi, ma nessuno dei due nel senso tradizionale.

Le JVM moderne prendono il bytecode e lo compilano in codice nativo quando necessario. "JIT" in questo contesto sta per " just in time."Agisce come un interprete dall'esterno, ma in realtà dietro le quinte sta compilando in codice macchina.

La JVM non deve essere confusa con il compilatore Java, che compila il codice sorgente in bytecode. Quindi non è utile considerarlo "un compilatore" ma piuttosto sapere che sullo sfondo fa qualche compilazione.

 31
Author: Mark Peters, 2011-10-06 13:27:01

È entrambi. Inizia interpretando il bytecode e può (se decide che ne vale la pena) quindi compilare quel bytecode in codice macchina nativo.

 4
Author: Paul Cager, 2011-10-06 13:25:42

Sono entrambi. Può interpretare bytecode e compilarlo in codice nativo.

 4
Author: Mat, 2011-10-06 13:25:55

Come @delnangià indicato nella sezione commenti, non è .

JVM è una macchina astratta che esegue bytecode Java.

JVM ha diverse implementazioni:

...e molti altri .

La maggior parte delle altre risposte quando si parla di JVM si riferiscono a HotSpot o alcuni degli approcci di cui sopra per implementare la JVM.

 3
Author: cubuspl42, 2017-08-04 21:07:15

Come altri hanno detto è entrambe le cose! Se si desidera fare riferimento in dettaglio di quanto si possa vedere: Questa descrizione IBM

 1
Author: DDC, 2012-02-15 15:29:49

Le JVM hanno sia compilatore che interprete. Perché il compilatore compila il codice e genera bytecode. Successivamente l'interprete converte il bytecode in codice comprensibile alla macchina.

Esempio: Scrivere e compilare un programma e funziona su Windows. Prendi il .file di classe su un altro sistema operativo (Unix) e verrà eseguito a causa dell'interprete che converte il bytecode in codice comprensibile alla macchina.

 -4
Author: M SANEDEEP KUMAR, 2012-05-01 08:28:57