Il compilatore Java (javac.exe) accetta i file di origine Java (.java) come input e genera file bytecode (.class) Java (se il codice viene compilato correttamente). Quindi esegui Java Launcher (java.exe) e lo indirizza al tuo bytecode. Spetta quindi alla Java virtual machine (JVM) prendere il tuo codice per il resto del tempo e convertire il tuo bytecode in codice macchina (o nativo).
Si può pensare ad esso come codice oggetto essendo più vicino al codice macchina, e bytecode come più lontano dal codice macchina. Inoltre, bytecode è portabile (che è uno dei grandi vantaggi del linguaggio Java), mentre il codice macchina deve essere "portato" mediante un processo manuale (cioè ri-compilazione per una diversa piattaforma o architettura di destinazione).
Il codice oggetto è "quasi" codice macchina, è un po 'nel mezzo. È come una porzione del codice macchina risultante. A causa della portabilità del linguaggio Java, non è possibile fare in modo che il compilatore traduca il codice sorgente direttamente nel codice macchina. Perché il codice macchina deve essere diverso per diverse piattaforme e architetture. Se qualcuno esegue il tuo bytecode su Windows, JVM tradurrà il tuo bytecode in un tipo di codice macchina. Se qualcuno esegue il tuo bytecode su un Mac OS X, JVM tradurrà il tuo bytecode in un diverso tipo di codice macchina.
Si può pensare alla JVM come interprete per il proprio bytecode. Anche se tecnicamente si chiama compilation JIT (Just In Time). La JVM fa parte di JRE (Java Runtime Environment) e mentre i programmi Java sono praticamente indipendenti dalla piattaforma (qualsiasi sistema che esegue la JVM può anche eseguire programmi Java), la parte JVM di JRE dipende dalla piattaforma.
La versione corta:
- Java compilatore produce bytecode (compilation a metà strada, indipendente dalla piattaforma, non è possibile eseguire ancora).
- La macchina virtuale Java produce codice macchina.
- Il codice oggetto è una parte del codice macchina risultante.
- Bytecode diventa codice oggetto all'ora JIT.
- Il codice oggetto diventa codice macchina (può essere eseguito il resto della compilazione, dipendente dalla piattaforma ).
Questo potrebbe non essere accurato al 100% poiché sto anche iniziando a imparare questa roba.Ma questa è la mia comprensione di questo concetto fino ad ora. Spero che aiuti.
Java compilatore compila il codice sorgente in codice byte. Non ho mai sentito parlare di "codice oggetto" ancora. –
un libro di uno dei tuoi professori? :) è stato scritto in inglese? – milan