Gibt es eine Möglichkeit, von Java zu eigenständigem (oder Bibliotheks-) Maschinencode zu kompilieren, ohne dass eine JVM erforderlich ist?
Gibt es eine Möglichkeit, von Java zu eigenständigem (oder Bibliotheks-) Maschinencode zu kompilieren, ohne dass eine JVM erforderlich ist?
Antworten:
Früher gab es ein Tool namens GCJ, das Teil von GCC war, aber es wurde entfernt . Jetzt verweisen alle Links auf der GCC-Site auf ihre Nicht-GCJ-Entsprechungen.
NB: Die Kommentare bezogen sich alle auf meine ursprüngliche Antwort, wonach Sie Java mit GCJ zu nativem Code kompilieren können.
Ja!
Oracle hat an GraalVm gearbeitet, das native Images unterstützt. Überprüfen Sie hier: https://www.graalvm.org/
Natives Image Die native Image-Funktion mit dem GraalVM SDK verbessert die Startzeit von Java-Anwendungen und verringert den Platzbedarf. Tatsächlich wird Bytecode, der auf der JVM (auf jeder Plattform) ausgeführt wird, in nativen Code für ein bestimmtes Betriebssystem / eine bestimmte Plattform konvertiert - daher kommt die Leistung. Es werden aggressive AOT-Optimierungen verwendet, um eine gute Leistung zu erzielen.
Mehr sehen:
Zusammenfassung
https://www.graalvm.org/docs/getting-started/#native-images
Demos: Native Images für einen schnelleren Start
https://www.graalvm.org/docs/examples/native-list-dir/
Detailliert: "Vorzeitige Kompilierung"
https://www.graalvm.org/docs/reference-manual/aot-compilation/
Windows
nur Spielzeugprogramme funktionieren, aber alles, was fortgeschrittener ist und / oder wenn man ein verwendet, GUI
noch nicht ganz da ist. Twitter
verwendet wahrscheinlich Linux
ohne, GUI
aber sie verwenden wahrscheinlich auch die kommerzielle Version, während ich nur die Community ausprobiert habe. Es kann für einige Anwendungsfälle aber Java funktionierenWindows
Desktopanwendungen gehören nicht dazu, was das Projekt dennoch etwas enttäuschend macht. Excelsior JET
könnte dies zuverlässig tun, aber es wird jetzt eingestellt.
Excelsior JET ist ein kommerzieller Java-Compiler für nativen Code. Es wurde jedoch im Mai 2019 eingestellt.
Ja, die JIT in der JVM erledigt genau das für Sie.
Tatsächlich kann es schnelleren Code erzeugen als das vorherige Kompilieren des Codes, da es Code generieren kann, der für die spezifische Plattform optimiert ist, basierend darauf, wie der Code zur Laufzeit verwendet wird.
Die JVM ist immer beteiligt, auch wenn ein sehr hoher Prozentsatz zu nativem Code kompiliert wird, da Sie Bytecode dynamisch laden und ausführen können.
Eine andere Möglichkeit wäre RoboVM
. Es scheint jedoch nur zu funktionieren Linux
, iOS
und Mac OS X
.
Bis heute scheint das Projekt noch etwas lebendig zu sein, im Gegensatz zu einigen Online-Posts, in denen behauptet wird, das Projekt sei tot .