Cork

Abstract
A memory leak in a garbage-collected program occurs when the program inadvertently maintains references to objects that it no longer needs. Memory leaks cause systematic heap growth, de- grading performance and resulting in program crashes after per- haps days or weeks of execution. Prior approaches for detecting memory leaks rely on heap differencing or detailed object statis- tics which store state proportional to the number of objects in the heap. These overheads preclude their use on the same processor for deployed long-running applications. This paper introduces a dynamic heap-summarization technique based on type that accurately identifies leaks, is space effic ient (adding less than 1% to the heap), and is time efficient (addin g 2.3% on average to total execution time). We implement this approach in Cork which utilizes dynamic type information and garbage col- lection to summarize the live objects in a type points-from graph (TPFG) whose nodes (types) and edges (references between types) are annotated with volume. Cork compares TPFGs across multiple collections, identifies growing data structures, and compu tes a type slice for the user. Cork is accurate: it identifies systematic heap growth with no false positives in 4 of 15 benchmarks we tested. Cork's slice report enabled us (non-experts) to quickly eli minate growing data structures in SPECjbb2000 and Eclipse, something their developers had not previously done. Cork is accurate, scal- able, and efficient enough to consider using online.

This publication has 14 references indexed in Scilit: