Java startet blitzschnell: JEP 544 kompiliert Code vorab
JEP 544: Ahead-of-Time Code Compilation
JEP 544 bringt Ahead-of-Time-Kompilierung in die HotSpot JVM: In einem Trainingslauf wird optimierter nativer Code erzeugt und im AOT-Cache gespeichert. In Produktionsläufen steht dieser sofort zur Verfügung, was die Startzeit um bis zu 80 % und die Warmup-Zeit um bis zu 75 % reduziert. Ändert sich die Last, greift HotSpot dynamisch auf JIT-Kompilierung zurück – Agilität und Portabilität bleiben erhalten.
Die Anwendung kann sich gewissermaßen einer weiteren Warmup-Phase unterziehen und die Leistung aufrechterhalten, während sich die Arbeitslast der Anwendung ändert.
- cogman10
Leyden hat sich ziemlich stark auf Trainingsläufe verlassen, was ich verstehe, aber Mann, das ist eine ziemlich harte Bürde, das einzurichten.
Die Tooling für solche Trainingsläufe existiert nicht wirklich, man muss am Ende etwas Maßgeschneidertes als Teil seiner Build-Pipeline machen, wenn man es dort haben will. Das kann besonders knifflig sein bei komplizierteren Anwendungen wie denen, die ich pflege.
Ich mag, was diese liefern können, aber ich mag den Aufwand nicht, der nötig ist, um es zum Laufen zu bringen.
- treyd
Was sind die architektonischen Unterschiede zwischen diesem und Androids Ahead-of-Time-Runtime?
- cyberax
Excelsior JET hat das vor 25 Jahren gemacht: https://en.wikipedia.org/wiki/Excelsior_JET
Es ist eine Schande, dass Sun/Oracle sich nie mit ihnen zusammengetan hat, um native Apps zu bringen. Das hätte Java auf dem Desktop retten können.
- java-man
Ich hoffe, dass wir irgendwann einen AOT-only-Modus bekommen (oder zu nativ kompilieren) und vielleicht sogar Cross-Compilation.
- ledo9915
Ein Datenpunkt aus einem kleinen Nebenprojekt: Ich führe Benutzercode in einer Piston-Sandbox für eine Coding-Challenge-Website aus. Ein triviales Java-Programm kostet 2,5-3 Sekunden Wanduhrzeit auf einer 4-vCPU-Box, fast alles davon javac plus JVM-Start. Go braucht etwa 1,7 Sekunden für Build plus Ausführung, und Swift, das durch den Interpreter läuft, liegt bei 0,4 Sekunden. Java ist der Grund, warum ich überhaupt ein globales Rate Limit für kompilierte Sprachen setzen musste. Wenn AOT die JVM-Seite auf ein paar hundert Millisekunden bringt, ändert das, was eine kleine Box bedienen kann.