Verallgemeinerte Just-in-Time Trace-Compilierung für Java
Generalization of Just-in-Time Trace Compilation for Java
Wissenschaftsdisziplinen
Informatik (100%)
Keywords
-
Just-In-Time Compilation,
Virtual Machines,
Trace Compilation,
Java,
Compiler Optimizations
Java-Quellcode wird in maschinenunabhängige Bytecodes übersetzt, die von einer virtuel-len Maschine (VM) interpretiert werden. Zur Laufzeit benutzen moderne Java-VMs einen Just-in-time-Compiler (JIT-Compiler), der die am häufigsten ausgeführten Methoden in Maschinencode übersetzt, während andere Methoden weiterhin interpretiert werden. Das erhöht die Ausführungsgeschwindigkeit von Java-Programmen bei vergleichsweise geringem Übersetzungsaufwand. Als weiteren Schritt in dieselbe Richtung haben Gal und andere kürzlich vorgeschlagen, die Übersetzungseinheit noch kleiner zu machen, d.h. nur gewisse Pfade durch häufig ausgeführte Schleifen zu übersetzen, während der Rest des Programms weiterhin interpretiert wird. Dieses Verfahren wird Trace-Compilierung genannt. Es führt zu einer weiteren Verkürzung der Übersetzungszeiten, erlaubt einfachere und aggressivere Optimierungen und macht Compiler klein genug, um auf Geräten mit beschränkten Ressourcen zu laufen. Trace-Compilierung ist derzeit auf Pfade durch Schleifen beschränkt. Dadurch wird unserer Meinung nach ihr volles Potenzial nicht ausgeschöpft. Es gibt auch Pfade außerhalb von Schleifen, die häufig genug ausgeführt werden, um ihre Übersetzung nach Maschinencode zu rechtfertigen. In anderen Worten: das Konzept der Trace- Compilierung kann verallgemeinert werden. Unsere Forschungsziele sind daher: (1) Die Trace-Compilierung zu verallgemeinern, indem Traces an beliebigen Stellen im Programm beginnen und enden können und indem Techniken entwickelt werden, um Traces aufzuspalten und zusammenzuführen; (2) Methoden als Ausführungseinheiten in übersetztem Code abzuschaffen und durch Traces zu ersetzen, die einander aufrufen können und dazu geeignete Aufrufkonventionen verwenden; (3) Zu untersuchen, in-wiefern herkömmliche Optimierungstechniken für die Trace-Compilierung angepasst und vereinfacht werden können. Wir haben vor, die Trace-Compilierung in die Java HotSpot VM von Sun Microsystems zu integrieren, die über das Open-Source-Projekt OpenJDK verfügbar ist. Die HotSpot VM ist eine der schnellsten derzeit verfügbaren Java VMs. Unsere Implementierung wird daher zeigen, ob Trace-Compilierung mit herkömmlichen JIT- Compilierungstechniken mithalten oder sie sogar übertreffen kann. In diesem Fall könnte unser Projekt zu einem Paradigmenwechsel im Bereich der Just-in-Time-Compilierung führen.
Java ist eine moderne und weit verbreitete Programmiersprache, in der man Programme schreiben kann, die auf unterschiedlichen Geräten laufen, vom Mobiltelefon bis zum Backbone-Server großer Unternehmen. Um Plattformunabhängigkeit zu gewährleisten, werden Java-Programme in der Regel von einer virtuellen Maschine interpretativ ausgeführt, was aber entsprechend langsam ist. Daher versucht man, die am häufigsten ausgeführten Programmteile während ihrer Ausführung in schnellen Maschinencode zu übersetzen. Man nennt das Just-in-time-Compilation (JIT- Compilation).Wir verwenden eine Variante der JIT-Compilation, bei der wir die Ausführungshäufigkeit einzelner Programmpfade messen und die häufigsten Pfade in Maschinencode übersetzen (Trace- Compilation). Da es meist nur wenige häufige Ausführungspfade gibt, ist deren Compilation entsprechend schnell. Schnelle Compilationszeiten führen aber automatisch zu schnelleren Gesamtlaufzeiten der Programme, da deren Compilation ja zur Ausführungszeit erfolgt.Im Gegensatz zu herkömmlichen Trace-Compilern erlauben wir in unserem Ansatz, dass Pfade nicht nur in Schleifen compiliert werden, sondern auch außerhalb von Schleifen, wenn sie dort genügend häufig ausgeführt wurden. Ein Pfad kann sich auch über mehrere Methoden erstrecken. Als besonderes Ergebnis unserer Forschung haben wir ein neues Verfahren entwickelt, mit dem wir Pfade aus Untermethoden kontextsensitiv in die rufende Methode einbetten können.Messungen haben gezeigt, dass unser einfaches Trace-basiertes Compilationsverfahren schnelleren Code erzeugt als einfache herkömmliche JIT-Compiler und dass es in manchen Benchmarks sogar einen der besten heutigen Java JIT-Compiler schlägt, wobei es dafür weniger als 10% seiner Compilationszeit benötigt.
- Universität Linz - 100%
- Christian Wimmer, University of California Irvine - Vereinigte Staaten von Amerika
Research Output
- 50 Zitationen
- 5 Publikationen
-
2014
Titel Trace transitioning and exception handling in a trace-based JIT compiler for java DOI 10.1145/2579673 Typ Journal Article Autor Häubl C Journal ACM Transactions on Architecture and Code Optimization (TACO) Seiten 1-26 Link Publikation -
2013
Titel Context-sensitive trace inlining for Java DOI 10.1016/j.cl.2013.04.002 Typ Journal Article Autor Häubl C Journal Computer Languages, Systems & Structures Seiten 123-141 Link Publikation -
2012
Titel Evaluation of trace inlining heuristics for Java DOI 10.1145/2245276.2232084 Typ Conference Proceeding Abstract Autor Häubl C Seiten 1871-1876 -
2011
Titel Trace-based compilation for the Java HotSpot virtual machine DOI 10.1145/2093157.2093176 Typ Conference Proceeding Abstract Autor Häubl C Seiten 129-138 -
2013
Titel Deriving code coverage information from profiling data recorded for a trace-based just-in-time compiler DOI 10.1145/2500828.2500829 Typ Conference Proceeding Abstract Autor Häubl C Seiten 1-12 Link Publikation