Garbage Collection in Go
In this talk Ben Darnell, the CTO and Co-Founder of Cockroach Labs, discusses the decision to utilize Go in CockroachDB. Ben shares how CockroachDB optimized its memory usage to mitigate issues related to garbage collection and improved its use of channels to avoid deadlocks. Ben also shares creative techniques to integrate non-Go dependencies into the Go build process.
Garbage collection in Go can cause an application to pause which is a concerning issue, but Go also makes a lot of manual tweaks available that allow contol of what actually ends up on top of the garbage heap. Here are two of the optimizations made by CockroachDB to mitigate garbage collection issues:
- Combining Allocations
- sync.Pool
By vitrue of these two practices (which you can see examples of in the video) CockroachDB sees in Go's benchmarking tools that no new allocations are done per iteration. Everything is allocated up front and cached.
CockroachDB Community Slack
This is a long, dense video with that covers a lot of ground. If you have followup questions you can join our CockroachDB Community Slack channel to chat with CockroachDB users and engineers about Go and CockroachDB.