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?
Antwort
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.
+1, cool, das wusste ich nicht! – FrustratedWithFormsDesigner
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. –
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
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.
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 .... –
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? –
@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. –
Excelsior JET ist ein kommerzieller Java-Native-Code-Compiler.
Nur für den Fall zeigen können, gibt es kostenlose Lizenzen für nichtkommerzielle Projekte. –
Wie ist es mit RoboVM zu vergleichen? –
- 1. Java in nativen Code kompilieren?
- 2. Isolieren nicht vertrauenswürdigen nativen Code in Java
- 3. Kann ich Java selbst kompilieren?
- 4. Beschränken Sie nativen Code-Funktionalität von Java
- 5. Kompilieren Swift-Code zu nativen ausführbaren Dateien für Linux
- 6. Wo kann ich meinen Ruby-Code kompilieren?
- 7. Kompilieren von komplexem Java-Programm in nativem Code mit GCJ
- 8. Code in nativen Prozess injizieren
- 9. nativen Code aus Eclipse anzeigen
- 10. Wie bekomme ich einen Breakpoint in NDK-nativem Code und debugge nativen Code in Android Studio?
- 11. Wie kann ich `.java file` in jsp kompilieren?
- 12. Wie kann ich Java-Code in Windows kompilieren, ohne das gesamte JDK zu installieren?
- 13. Kann ich ein Scala-Projekt mit gemischtem Java und Scala Code mit Abhängigkeiten in Maven kompilieren?
- 14. ich kann nicht mein Java-Programm in Eingabeaufforderung kompilieren
- 15. Kann ich Java-Code in XCode 3.2.1 schreiben?
- 16. Rufen Sie nicht-nativen Java-Code von Python
- 17. Wie kann ich Code für emscripten bedingt kompilieren?
- 18. Debug nativen Code in Android-Bibliothek
- 19. Kompilieren Sie Java zu asm.js
- 20. Wie MAC-Adresse in Android nativen Code
- 21. wie kann ich die ts Code kompilieren zu 'erfordern ([' Some '])
- 22. Kann TypeScript nach ES6-Code kompilieren?
- 23. Kompilieren von Groovy Code in meiner Java EE-Anwendung
- 24. Kann python distutils CUDA-Code kompilieren?
- 25. Wie kann ich diesen Java Code optimieren?
- 26. Warum kann ich meine Java-Anwendungen nicht mit Ubuntu kompilieren?
- 27. Wo genau NDK nativen Code ausführen
- 28. Gradle kann nicht mit Java kompilieren 1.8
- 29. Wie importieren Medien/stagefright/* Klassen in Android nativen Code
- 30. Java programmgesteuert kompilieren jar
"Kompilieren" ist das Wort, nach dem Sie suchen (anstatt "compilate"). –
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. –
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. –