Disclaimer This post provides an intentionally watered-down overview of mark sweep garbage collection algorithm and the tradeoffs involved around it. A lot of the gory implementation details aren’t mentioned. Recap At a high level, an automatic memory management system has two key responsibilities: Allocate space for new objects Reclaim space from dead objects The sole responsibility of a garbage collector is to reclaim the space used by every object that will no longer be used by any of the execution paths in the program.
TL;DR Stop reading if you’ve a computer with infinite memory. In this series of blog posts, I’ll go over some well known garbage collection techniques and analyze the tradeoffs involved from the system design perspective. All the ideas are taken from existing literature and I am not making any claims of original work. Garbage collection is a subject that is very close to my heart, and by writing about it I hope to improve my own understanding of modern language runtimes.
I recently came across an interesting opinion paper that posits – modern VMMs are microkernels done right. Its a bit dated but a good read nonetheless. I couldn’t help but disagree with some parts of their claims. In all honesty, comparing VMMs to microkernels doesn’t feel like an apples to apples comparison. I am summing up my thoughts for your instructive criticism. Avoid Liability Inversion Their claim about microkernels having performance problems because of page evictions by user-space pagers is correct for the most part.
In 1983, Butler Lampson published a landmark paper about Hints of Computer System Design. As a practitioner and a student of distributed systems design, I find it immensely insightful and I habitually go back and re-read this paper every few months. In this post I’ll try and summarize some of the learnings from this paper that I’ve gained over the years. Prerequisite Before jumping into system design, think hard about what is it that you are trying to accomplish?