Efficient Cycle Collection in a Hybrid Garbage Collector with Reference Counting and Mark-And-Sweep
Total Page:16
File Type:pdf, Size:1020Kb
Efficient Cycle Detection on a Partially Reference Counted Heap DIPLOMARBEIT zur Erlangung des akademischen Grades Diplom-Ingenieur im Rahmen des Studiums Software Engineering & Internet Computing eingereicht von Stefan Beyer, BSc Matrikelnummer 01225423 an der Fakultät für Informatik der Technischen Universität Wien Betreuung: Ao.Univ.Prof. Dipl.-Ing. Dr.techn. Andreas Krall Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Wien, 26. Februar 2020 Stefan Beyer Andreas Krall Technische Universität Wien A-1040 Wien Karlsplatz 13 Tel. +43-1-58801-0 www.tuwien.at Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Efficient Cycle Detection on a Partially Reference Counted Heap DIPLOMA THESIS submitted in partial fulfillment of the requirements for the degree of Diplom-Ingenieur in Software Engineering & Internet Computing by Stefan Beyer, BSc Registration Number 01225423 to the Faculty of Informatics at the TU Wien Advisor: Ao.Univ.Prof. Dipl.-Ing. Dr.techn. Andreas Krall Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Vienna, 26th February, 2020 Stefan Beyer Andreas Krall Technische Universität Wien A-1040 Wien Karlsplatz 13 Tel. +43-1-58801-0 www.tuwien.at Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Erklärung zur Verfassung der Arbeit Stefan Beyer, BSc Hiermit erkläre ich, dass ich diese Arbeit selbständig verfasst habe, dass ich die verwen- deten Quellen und Hilfsmittel vollständig angegeben habe und dass ich die Stellen der Arbeit – einschließlich Tabellen, Karten und Abbildungen –, die anderen Werken oder dem Internet im Wortlaut oder dem Sinn nach entnommen sind, auf jeden Fall unter Angabe der Quelle als Entlehnung kenntlich gemacht habe. Wien, 26. Februar 2020 Stefan Beyer Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. v Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Danksagung Zu allererst will ich mich bei meinem Professor, Andreas Krall, für seine anhaltende Unterstützung und seine Bemühungen, mich fokussiert und motiviert zu halten, bedanken. Obwohl ich eine gefühlte Ewigkeit für diese Arbeit benötigt habe, gab er mir innerhalb weniger Stunden oder Tage hilfreiche Rückmeldungen, wann auch immer ich eine Frage oder etwas zu begutachten hatte. Ich habe den Eindruck, dass er sich wirklich um seine Studenten kümmert, und versteht wie sehr sie sich für ihre Diplomarbeit anstrengen, etwas das nicht selbstverständlich ist. Außerdem will ich mich bei meiner Mutter für ihre ununterbrochene Bemühung bedanken, alles von mir fernzuhalten und mich stets zu unterstützen, sodass ich mich auf mein Studium konzentrieren konnte. Deine Ratschläge sind vielleicht nicht immer angekommen, aber du hast nie aufgehört an mich zu glauben. Ich hoffe du weißt, dass ich das ebenfalls nicht für selbstverständlich halte. Ich will auch meiner Freundin Chiara danken, für die Motivation und die emotionale Unterstützung, die sie mir gegeben hat um diese Arbeit zu vollenden. Ohne dich, hätte ich wahrscheinlich noch viel mehr Zeit benötigt. Zudem möchte ich mich noch beim Rest meiner Familie, meinen Freunden und Kollegen für ihre Gesellschaft und ihr offenes Ohr bedanken, das sie mir geliehen haben, wann auch immer ich jemanden zum Zuhören brauchte. Die gemeinsamen Ausfahrten mit meiner Mountainbike-Gruppe, die mir geholfen haben meinen Kopf freizubekommen wenn er voller Fragen war, habe ich sehr geschätzt. Sehr wertvoll waren auch die tollen Erfahrungen mit meiner Improtheatergruppe, die mir Selbstbewusstsein gegeben und mich zum Lachen gebracht haben, auch wenn mir manchmal nicht zum Lachen war. Ohne euch allen hätte ich diese Arbeit wohl ebenfalls nicht fertig bekommen. Zu guter Letzt möchte ich mich auch beim PyPy-Team bedanken, unter anderem bei Armin Rigo und Richard Plangger. Ihr alle habt mich nicht nur herzlichst Willkommen geheißen und mir die ursprüngliche Idee für meine Arbeit geliefert, sondern mir auch mit eurer Erfahrung und eurem Wissen geholfen, am richtigen Weg zu bleiben. Auch wenn ich manchmal zu stolz war, um eure Hilfe in Anspruch zu nehmen, weiß ich die Hilfestellungen und die Unterstützung, die ihr mir zukommen habt lassen, sehr zu schätzen. Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. vii Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Acknowledgements First of all, I would like to thank my professor, Andreas Krall, for his continuing support and his efforts at keeping me focused and motivated to work on my thesis. Even though it took me almost forever to finish this piece of paper, he gave me helpful advice within a matter of hours or days, whenever I had a question or something to review. To me it seems like he really cares for his students and the hard work they put into their thesis, something that should not be taken for granted. I would also like to thank my mother for her ongoing efforts, at keeping everything she possibly could away from me and always supporting me, so I could concentrate on my studies. The advice you gave me might not have always been heard, but you never stopped believing in me. I hope you know, that I also do not take this for granted. I would also like to thank my girlfriend, Chiara, for the motivation and emotional support she gave me, to bring this thesis to the finish line. It would have probably taken me even longer, if not for you. Also, I would like to thank all of my family, friends and colleagues for their company and friendly ear, when I needed someone to talk to. I really enjoyed the tours with my mountain bike crew, who helped me to free my mind, when I was full of questions. I also value the great experiences I had with my improvisational theatre group, who helped me gaining my confidence and made me laugh, when I needed it. I would not have finished this thesis, without all of you. Last but not least I would thank the PyPy team, including but not limited to Armin Rigo and Richard Plangger, who not only gave me a warm welcome and the initial idea for this thesis, but also kept me on track by sharing their experience and knowledge. Even though I was sometimes too proud to seek help from you, I really apprieciate the support and guidance you gave me. Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. ix Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Kurzfassung Zur automatisierten Speicherbereinigung, kurz Garbage Collection, existieren zwei grund- legende Ansätze: Tracing und Reference Counting. Ziel dieser Arbeit ist es, einen Algo- rithmus zu finden, der beide Ansätze auf effiziente Weise vereint, und der es ermöglicht Zyklen auf teilweise referenzgezählten Heaps zu erkennen, ein Problem das typischerwei- se in Sprachintegrationen auf Compiler-Ebene gefunden werden kann, und gleichzeitig die Auswirkungen auf die zu integrierenden Technologien und deren Garbage Collector niedrig hält. Zwei Versionen dieses Algorithmus wurden im PyPy Just-in-time-Compiler implementiert, um die Integration von CPython-Erweiterungsmodulen zu unterstützen. Der finale Algorithmus ist an Jython’s JyNI-Integration [Ric16] angelehnt, kann aber als eigenständig betrachtet werden. Eine teilweise und eine vollständig inkrementelle Version dieses Algorithmus wurden entworfen und deren Korrektheit semiformell bewiesen. Die Implementierungen wurden mittels aufwändiger Tests verifiziert und mithilfe eigener Benchmarks verglichen. Die Ergebnisse zeigen, dass das Verhalten der vollständig inkre- mentellen Version des Algorithmus relativ gut ist und ein großer Teil des Mehraufwands kompensiert werden kann, der durch die vollständige Integration beider Ansätze entsteht. Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. xi Die approbierte gedruckte Originalversion dieser Diplomarbeit ist an der TU Wien Bibliothek verfügbar. The approved original version of this thesis is available in print at TU Wien Bibliothek. Abstract Two essential garbage collection techniques exist: tracing and reference counting. The goal of this work is to find an algorithm, to efficiently combine both approaches and collect cycles in partially reference counted heaps, a problem which is typically found