Many Java performance problems are related to garbage collection. Unfortunately, the garbage collector interacts with applications in complex and often surprising ways, so that achieving acceptable GC performance can be a very difficult task. To make things worse, much of the "conventional wisdom" about garbage collection isn't wisdom at all. This talk presents tips and techniques taken from real-world situations that can help you understand what your application and the garbage collector are really fighting about. It also offers recommendations for building applications that work well with the garbage collector from the start.