2014-09-26 19 views
10

Il JDK viene fornito con il programma java.exe (per Windows). Puoi usarlo per avviare programmi dalla riga di comando.Il programma java.exe è la VM effettiva?

Wikipedia dice che è il "caricatore di classi" e "un interprete per i file di classe".

È questa la JVM completa in piena regola? È una JVM "più piccola e leggera"? È qualcos'altro?

+3

Vedere http://stackoverflow.com/questions/26020872/totally-confused-with-java-exe/26025656#26025656 – apangin

+0

Questa domanda non sembra un duplicato di detta domanda chiusa perché riguarda la semantica dell'articolo e del testo di Wikipedia; l'altra domanda riguarda come viene implementato lo stack JRE. eseguibili/classes/attività. Questo è * qualcosa * deve ancora "caricare e interpretare", non importa se è in un eseguibile stesso, codice di libreria in una DLL caricata dall'eseguibile, o un servizio ospitato su qualche server remoto, ecc. – user2864740

risposta

-1

java.exe invia i file di classe a JVM in modo che possa eseguire JIT e interpretare il codice. java.exe da solo non è una VM, no. Ne lancia uno e fornisce tutti i dati necessari per questo.

Per compilare il codice, è necessario utilizzare javac.exe.

Supponiamo di avere Test.java codice della classe, ora è necessario compilarlo:

javac Test.java 

compilatore uscita Test.class file compilato, che contiene JVM bytecode.

Ora, al fine di eseguire su JVM, si esegue

java Test 

che trova il punto di ingresso in .class file disponibili e alimenta JVM con esso.

+0

Most JVM le implementazioni eseguono la compilazione JIT (Just In-Time) del bytecode nel codice nativo, quindi non è solo un interprete. –

+0

JIT è una prerogativa di VM, java.exe non è JVM, in senso stretto. Lo avvia e lo alimenta con il codice. – GuardianX

+0

Con questa logica, 'java.exe' non alimenta nemmeno il codice JVM, fatto da' ClassLoader' che fa parte della JVM. –

8

Una JVM fa sia di tali attività, per definizione e requisito.

In un'implementazione maturo, tra cui HotSpot, una JVM fa molto di più tra cui Just-In-Time compilation (come ritenuto utile) - ma deve ancora carico e interpretare i file di classe e Java bytecode. Sapere questo dovrebbe alleviare la confusione sull'articolo usando "interprete"; spiega il compito concettuale e dovrebbe non essere inteso per indicare più piccolo o leggero.

launches "full JVM" in un ambiente Oracle/OpenJDK standard.

+1

Quale file contiene il codice macchina che costituisce la VM stessa? – hexafraction

+0

Non c'è un solo file, ce ne saranno molti e quelli esistenti dipendono dal sistema e dalla versione. Controlla la directory bin del runtime per trovare già la maggior parte di essi. La libreria condivisa principale sarà 'jvm.xxx', ad esempio jvm.dll nella versione Windows. – Gimby

+0

@hexafraction 'jvm.dll' su Windows o' libjvm.so' su Linux – apangin

7

java.exe è solo un avvio di VM. Crea una VM e la esegue. JVM situato nel file jvm.dll (o libjvm.so su Linux).

Io lavoro con OpenJDK (NON nel team di OpenJDK) e posso dirti maggiori dettagli, se sei interessato.

+4

Siamo interessati. – topher

+0

@topher, ok, creerò un post su di esso e quindi incollerò il link per postare qui. Non sono sicuro - posso creare post (non domanda) su SO? Post scriptum sto solo imparando l'inglese e le mie risposte potrebbero contenere alcuni errori) – Kastaneda

+1

Va bene. Siamo qui per imparare. Modifica la tua risposta per includere tutte le informazioni che ritieni rilevanti. Qualsiasi problema linguistico nel tuo post verrà corretto dalla community. – topher

Problemi correlati