Esiste un modo per compilare da Java a codice macchina standalone (o libreria) senza richiedere una JVM?Posso compilare Java nel codice nativo?
risposta
C'era uno strumento chiamato GCJ che faceva parte di GCC, ma è been removed. Ora, tutti i collegamenti nel sito GCC vengono reindirizzati ai loro equivalenti non GCJ.
NB: i commenti si riferiscono tutti alla mia risposta originale dicendo che è possibile compilare Java in codice nativo con GCJ.
+1, bello, non lo sapevo! – FrustratedWithFormsDesigner
Sì, gcj è il più conosciuto. @ isola009: tieni presente che quando si compila il codice nativo, probabilmente si lavorerà con un sottoinsieme (forse un sottoinsieme drammaticamente piccolo) delle * librerie * che Java normalmente ha per impostazione predefinita. Gnu è abbastanza buono, da tutti i conti, ma ben dietro l'attuale JDK. –
È molto indietro * tutto * JDKS che inizia con 1.2. Ho riscontrato molti problemi di supporto con persone che eseguivano accidentalmente GNU classpath anziché Java, e sono stati tutti risolti senza eccezioni disinstallandoli e utilizzando Sun JDK. – EJP
Sì, il JIT nella JVM fa esattamente questo per voi.
In effetti può produrre codice più veloce rispetto alla compilazione anticipata del codice in quanto può generare codice ottimizzato per la piattaforma specifica in base a come il codice viene utilizzato in fase di esecuzione.
La JVM è sempre coinvolta anche se una percentuale molto elevata viene compilata nel codice nativo in quanto è possibile caricare ed eseguire il codice byte in modo dinamico.
Sì, hai ragione sul fatto che il JIT lo fa e lo fa molto bene. Non è un eseguibile autonomo, ma l'OP non lo chiedeva ... –
Sembra che suggerisca che solo i JIT possono fare un'ottimizzazione specifica della piattaforma. Penso che sia possibile ogni volta che si spedisce bytecode. L'ART compila bytecode su codice nativo al momento dell'installazione, e non è un JIT. Peter, hai qualche commento su questo? –
@JanusTroelsen Hai un collegamento a questo compilatore? È ampiamente usato? È stato aggiunto negli ultimi 5 anni? Senza la JIT non è possibile eseguire una compilazione dinamica che è probabilmente più importante. –
Excelsior JET è un compilatore Java per codice nativo.
Solo nel caso, ci sono licenze libere per i progetti non commerciali. –
come si confronta con RoboVM? –
"compile" è la parola che stai cercando (piuttosto che "compilare"). –
Se il tuo interesse è la velocità, non preoccuparti se non stai guardando una piattaforma che HotSpot (Sun's JVM) non supporta. HotSpot compila bytecode su codice nativo al volo, ogni volta che viene visualizzato un "hotspot" del percorso di esecuzione (qualcosa che viene eseguito molto) ed è molto buono. Ma se stai cercando di evitare di richiedere una JVM, sì, guarda il gcj che James ti ha indicato. –
Un altro motivo è la protezione contro i decompilatori Java. Per quanto riguarda le prestazioni di HotSpot vs compilatore nativo (vs JRockit vs IBM vs GCC vs Visual C++ vs scrittura a mano-CPU-in-hex), dipende dall'applicazione, quindi YMMV. –