Automatic Object Inlining in a Java Virtual Machine

Christian Wimmer
Institute for System Software
wimmer@ssw.jku.at


Abstract

Object-oriented Java applications allocate many small objects linked together by field references. Such fields are frequently loaded and thus impose a run-time overhead. Object inlining reduces these costs by eliminating unnecessary field loads. It embeds referenced objects into their referencing object. The order of objects on the heap is changed in such a way that objects accessed together are placed next to each other. Then their offset is fixed, i.e. the objects are colocated. This allows field loads to be replaced by address arithmetic.

Array inlining expands the concepts of object inlining to arrays, which are frequently used for the implementation of dynamic data structures. Therefore, the length of arrays often varies, and fields referencing such arrays have to be changed. An efficient code pattern detects these changes and allows the optimized access of such array fields.

These optimizations are integrated into Sun Microsystems' Java HotSpot™ virtual machine. The analysis is performed automatically at run time, requires no actions on the part of the programmer, and supports dynamic class loading. It is embedded into the just-in-time compiler and garbage collector and does not need a global data flow analysis. The evaluation shows that the dynamic approach successfully identifies and optimizes frequently accessed fields for several benchmark suites with a reasonable low compilation and analysis overhead.

Kurzfassung

Objektorientierte Java-Anwendungen verwenden viele kleine Objekte, die über Felder miteinander verbunden sind. Solche Felder werden häufig geladen und erhöhen die Ausführungszeit. Objekt-Inlining reduziert die Kosten, indem unnötige Feldzugriffe entfernt werden. Die Reihenfolge von einander referenzierenden Objekten wird so geändert, dass verbundene Objekte im Speicher hintereinander liegen. Dadurch ist der Abstand zwischen den Objekten konstant und Feldzugriffe können durch Adressberechnungen ersetzt werden.

Array-Inlining erweitert die Optimierung von Objekten auf Arrays. Diese werden oft für dynamische Datenstrukturen verwendet. Dadurch ist ihre Länge nicht bekannt, und Felder, die auf Arrays zeigen, werden häufig geändert. Da diese Änderungen effizient erkannt werden können, ist die Optimierung solcher Felder möglich.

Diese Optimierungen sind in die Java HotSpot™ VM von Sun Microsystems integriert. Die Analyse wird automatisch zur Laufzeit ausgeführt, benötigt keine speziellen Zusatzinformationen und unterstützt das dynamische Laden von Klassen. Sie ist in den Just-in-Time-Compiler und den Garbage Collector integriert und verwendet keine globale Datenfluss-Analyse. Die Evaluierung zeigt, dass dieser dynamische Ansatz mit geringem Laufzeit-Aufwand wichtige Felder erkennt und optimiert.


PhD thesis, Johannes Kepler University Linz, February 2008.

Download as PDF