Starzinger, M. (2011). Exact garbage collection for the cacao virtual machine [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://resolver.obvsg.at/urn:nbn:at:at-ubtuw:1-38559
Jede abstrakte Maschine, die Java Bytecode ausführen kann, muss eine gewisse Art der automatischen Speicherverwaltung durchführen, welche als Speicherbereinigung bezeichnet wird. Jedoch ist nicht spezifiziert wie genau diese Speicherbereinigung umgesetzt werden muss.<br />Bisher hat die Cacao Virtual Machine (CacaoVM) eine konservative Speicherbereinigung, welche für nichtkooperative Umgebungen entwickelt wurde, verwendet und konnte daher Informationen aus der Laufzeitumgebung nicht voll ausnutzen. Dieser konservative Ansatz wurde durch einen exakten abgelöst, der auf die speziellen Bedürfnisse einer Java Laufzeitumgebung zugeschnitten werden konnte.<br />Im Zusammenhang mit Java müssen diverse Komponenten der abstrakten Maschine aufeinander abgestimmt werden, damit exakte Speicherbereinigung funktionieren kann. Alle Ausführungsstränge einer Anwendung agieren als Zugriffsmethoden auf den Speicher und müssen davon abgehalten werden die Speicherbereinigung negativ zu beeinflussen. Ein weiterer zentraler Punkt ist das Auffinden von Referenzen, die in den Speicher zeigen und Objekte vor einer Bereinigung bewahren. Diese Referenzen werden als Wurzelmenge bezeichnet und halten Objekte am Leben. Die eigentlichen Algorithmen zur Bereinigung müssen tote Objekte aufsammeln und den Speicher so umstrukturieren, dass freie Speicherbereiche wieder zur Verfügung stehen. Diese Algorithmen wurden in den letzten Jahrzehnten tiefgreifend erforscht und weisen extrem unterschiedliche Eigenschaften auf.<br />Alle zuvor angesprochenen Aspekte müssen aus dem Blickwinkel einer puren Just-in-time-Übersetzung, wie sie von CacaoVM durchgeführt wird, betrachtet werden. Manche entscheidenden Vereinfachungen, welche auf ein Zurückschalten in einen nichtoptimierten interpretierenden Modus beruhen, müssen diesbezüglich erneut untersucht werden. Es wurde besonders darauf geachtet, eine Weiterentwicklung in Richtung einer generationellen Speicherbereinigung zu ermöglichen, indem die nötige Infrastruktur zur Verfügung gestellt wurde.<br />
de
Every virtual machine capable of executing Java byte-code needs to perform some sort of automatic memory management, commonly referred to as garbage collection. However, it is not specified how this garbage collection process actually has to be performed. So far the Cacao Virtual Machine (CacaoVM) used a conservative garbage collector that was designed for uncooperative environments, thus it has been unable to take full advantage of the information already present in the runtime infrastructure. This conservative garbage collector was replaced by an exact one, which has been tailored to the specific needs of a Java Runtime Environment.<br />In the context of Java several different components of the virtual machine need to be orchestrated for exact garbage collection to work.<br />The application threads act as mutators on the heap and need to be prevented from interfering with the collector. Another central aspect is identifying the actual references which point into the heap and prevent objects from being collected. These references are referred to as the root-set and keep objects alive. The actual collection algorithms are in charge of cleaning up dead objects and reorganizing the heap, so that free memory is made available again. Those algorithms have already been researched in depth over the past decades, exhibiting vastly different characteristics.<br />All of the above aspects need to be considered from the perspective of a pure Just-In-Time compilation approach as taken by CacaoVM. Some crucial simplifications, which rely on fallbacks into an unoptimized interpreter mode, cannot be applied and need to be revisited in this setting.<br />Special care was taken to allow future development towards a generational garbage collection approach by providing the necessary infrastructure.<br />