After trying Go for the first time recently, I am amazed with how fast the programs compile. The compiled code ends up being in machine code, and no intermediate virtual machine is required. However, there is one piece that is present in each executable i.e. the garbage collector - GC.
But, how does GC work in Go? How tunable is it? For now this is what I have found:
On the topic of performance, keep in mind that Go gives the programmer considerable control over memory layout and allocation, much more than is typical in garbage-collected languages. A careful programmer can reduce the garbage collection overhead dramatically by using the language well; see the article about profiling Go programs for a worked example, including a demonstration of Go’s profiling tools.
Go 1.5 concurrent garbage collector pacing
Go 1.4 release
Go 1.3 release
Go 1.2 release * The garbage collector has been made more parallel, which can reduce latencies for programs running on multiple CPUs. * The garbage collector is also more precise, which costs a small amount of CPU time but can reduce the size of the heap significantly, especially on 32-bit architectures. * https://golang.org/doc/go1.1#performance
Go 1.0 release
For an in-depth survey of Garbage Collection algorithms, there as an excellent book. The Garbage Collection Handbook - http://gchandbook.org/
I am simply amazed by the speed at which Go programs compile. Following the above pattern, it feels that Go is the way to Go for many software development tasks.
If that isn’t enough checkout whats upcoming in Go 1.6 - http://www.infoq.com/news/2015/09/go-16-garbage-collection