Czy istnieje sposób na skompilowanie kodu maszynowego Java do samodzielnego (lub bibliotecznego) kodu maszynowego bez konieczności posiadania maszyny JVM?
Czy istnieje sposób na skompilowanie kodu maszynowego Java do samodzielnego (lub bibliotecznego) kodu maszynowego bez konieczności posiadania maszyny JVM?
Odpowiedzi:
Kiedyś istniało narzędzie o nazwie GCJ, które było częścią GCC, ale zostało usunięte . Teraz wszystkie linki w witrynie GCC przekierowują do ich odpowiedników innych niż GCJ.
Uwaga: wszystkie komentarze odnosiły się do mojej oryginalnej odpowiedzi, mówiącej, że można skompilować Javę do kodu natywnego za pomocą GCJ.
Tak!
Oracle pracuje nad GraalVm, który obsługuje obrazy natywne. Sprawdź tutaj: https://www.graalvm.org/
Obraz natywny Funkcja obrazu natywnego w pakiecie SDK GraalVM pomaga skrócić czas uruchamiania aplikacji Java i zapewnia im mniejszy ślad. W efekcie konwertuje kod bajtowy działający w maszynie JVM (na dowolnej platformie) na kod natywny dla określonego systemu operacyjnego / platformy - stąd pochodzi wydajność. Korzysta z agresywnych optymalizacji z wyprzedzeniem (AOT), aby osiągnąć dobrą wydajność.
Zobacz więcej:
Podsumowanie
https://www.graalvm.org/docs/getting-started/#native-images
Dema: obrazy natywne dla szybszego uruchamiania
https://www.graalvm.org/docs/examples/native-list-dir/
Szczegóły: „Kompilacja z wyprzedzeniem”
https://www.graalvm.org/docs/reference-manual/aot-compilation/
Windows
tylko programy zabawkowe, ale nic bardziej zaawansowanego i / lub gdy używam, GUI
nie jest jeszcze dostępne. Twitter
prawdopodobnie używa Linux
bez żadnego, GUI
ale prawdopodobnie używają również wersji komercyjnej, podczas gdy ja wypróbowałem tylko wersję społecznościową. Może to działać w niektórych przypadkach, ale aplikacje Windows
komputerowe Java nie są jedną z nich, co nadal sprawia, że projekt jest nieco rozczarowujący. Excelsior JET
może to zrobić niezawodnie, ale teraz zostało przerwane.
Excelsior JET to komercyjny kompilator Java do natywnego kodu. Jednak w maju 2019 został przerwany.
Tak, JIT w JVM robi dokładnie to za Ciebie.
W rzeczywistości może generować kod szybszy niż kompilowanie kodu z wyprzedzeniem, ponieważ może generować kod zoptymalizowany dla określonej platformy w oparciu o sposób wykorzystania kodu w czasie wykonywania.
JVM jest zawsze zaangażowana, nawet jeśli bardzo wysoki procent jest kompilowany do kodu natywnego, ponieważ można dynamicznie ładować i uruchamiać kod bajtowy.
Inną możliwością byłoby RoboVM
. Jednak wydaje się, tylko do pracy Linux
, iOS
aMac OS X
.
Na dzień dzisiejszy projekt nadal wydaje się nieco żywy, w przeciwieństwie do niektórych postów internetowych twierdzących, że projekt jest martwy .