2010-06-07 14 views
49

Gibt es eine Möglichkeit, von Java zu Standalone- (oder Bibliotheks-) Maschinencode zu kompilieren, ohne eine JVM zu benötigen?Kann ich Java in nativen Code kompilieren?

+2

"Kompilieren" ist das Wort, nach dem Sie suchen (anstatt "compilate"). –

+4

Wenn Ihr Interesse ist Geschwindigkeit, nicht die Mühe, es sei denn, Sie betrachten eine Plattform, die HotSpot (Sun JVM) nicht unterstützt. HotSpot kompiliert Bytecode zu nativem Code on-the-fly, wo immer ein "Hotspot" des Ausführungspfads (etwas, was viel ausgeführt wird) auftaucht, und es ist sehr gut darin. Aber wenn Sie vermeiden wollen, eine JVM zu benötigen, dann sehen Sie sich den gcj an, auf den James Sie hingewiesen hat. –

+1

Ein weiterer Grund ist der Schutz gegen Java-Decompiler. Wie für HotSpot vs native Compiler (vs JRockit vs IBM vs GCC vs Visual C++ vs Hand-Schreiben-CPU-Anweisungen-in-Hex) Leistung, es hängt von der Anwendung, so YMMV. –

Antwort

33

Früher gab es ein Tool namens GCJ, das Teil von GCC war, aber es ist been removed. Nun verweisen alle Links auf der GCC-Site auf ihre Nicht-GCJ-Äquivalente.

Hinweis: Die Kommentare beziehen sich alle auf meine ursprüngliche Antwort, dass Sie Java mit GCJ in nativen Code kompilieren können.

+2

+1, cool, das wusste ich nicht! – FrustratedWithFormsDesigner

+2

Ja, gcj ist der bekannteste. @ isola009: Beachten Sie, dass Sie beim Kompilieren mit systemeigenem Code wahrscheinlich mit einer Untergruppe (möglicherweise einer sehr kleinen Untermenge) der * Bibliotheken * arbeiten, die Java normalerweise standardmäßig besitzt. Gnu ist ziemlich gut, nach allen Konten, aber gut hinter dem aktuellen JDK. –

+0

Es ist gut hinter * all * JDKS beginnend mit 1.2. Ich habe viele Support-Probleme mit Leuten festgestellt, die zufällig GNU-Klassenpfad anstelle von Java ausgeführt haben, und sie wurden alle ohne Ausnahme durch die Deinstallation und Verwendung eines Sun JDKs geheilt. – EJP

6

Ja, das JIT in der JVM macht genau das für Sie.

In der Tat kann es schneller Code als das Kompilieren des Codes im Voraus erzeugen, da es Code generieren kann, der für die bestimmte Plattform basierend auf der Verwendung des Codes zur Laufzeit optimiert ist.

Die JVM ist immer beteiligt, auch wenn ein sehr hoher Prozentsatz in nativen Code kompiliert wird, da Sie Bytecode dynamisch laden und ausführen können.

+10

Ja, Sie haben Recht, dass das JIT es tut und es sehr gut macht. Es macht keine eigenständige ausführbare Datei, aber das OP hat nicht danach gefragt .... –

+2

Sie scheinen vorzuschlagen, dass nur JITs plattformspezifische Optimierung durchführen können. Ich denke, es ist möglich, wenn Sie Bytecode versenden. ART kompiliert Bytecode bei der Installation in nativen Code und ist kein JIT. Peter, hast du irgendwelche Kommentare dazu? –

+0

@JanusTroelsen Haben Sie einen Link zu diesem Compiler? Ist es weit verbreitet? Wurde es in den letzten 5 Jahren hinzugefügt? Ohne das JIT können Sie keine dynamische Kompilierung durchführen, die wahrscheinlich wichtiger ist. –

14

Excelsior JET ist ein kommerzieller Java-Native-Code-Compiler.

+3

Nur für den Fall zeigen können, gibt es kostenlose Lizenzen für nichtkommerzielle Projekte. –

+1

Wie ist es mit RoboVM zu vergleichen? –

Verwandte Themen