Specialized Reference Counting Garbage Collection using Data
Structure AnnotationsBy Eric Watkins and Dzin Avots
for CS 343 Spring 2002
Motivation
• Improve use of ref counting for C++
• Problem: cycles can’t be freed automatically, expensive to determine what is unreachable
• Solution: Use user specified data structure annotations to improve performance
Goals & Techniques
• Avoid unnecessary mark & sweeps– Acyclic Data Structure Optimizations
• Avoid some memory leaks– Reference Removal Invariant Model
Reference Counting using Smart Pointers
Garbage Example #1
• Doubly Linked List
• Everything is strongly connected
• Nothing can be freed until all external refs are gone
• How can we recognize this data structure?ext ptr ext ptr
Abstract Description of Data Structures
• The compiler can’t differentiate these two even though they will obviously be connected in different ways.
• ADDS can tell us how to customize smart pointer usage for certain data structures
Doubly Linked List ADDS
Binary Tree w/ Parents ADDS
ADDS spec
• Dimensions (1-d, 2-d, etc.)
• Directionality (forward and backward)
• Uniqueness of forward references (DAGs vs. lists)
• Cyclicity
Linked List Optimization
• The entire dimension is strongly connected, forwards and backwards
• Summarize with single ref counter for all external references to dimension
Dimensional Independence
• Dimensions X and Y are dependent if one traversal along X and another traversal along Y may lead to a common node by different paths
Other ADDS issues
• What about describing relations between different acyclic data structures?
• Could avoid marking & sweeping this structure
etc.
Primary & Secondary Pointers
• Primary pointers – if these point to an object, then object is still in use
• Secondary pointers – point to object, but don’t affect use status
• Memory leak – Primary pointers are all removed, but a secondary pointer remains
Garbage Example #2
Bug
BugManager Grid
Bug
Secondary refs Primary refs
• Programs can contain complicated, interconnected relationships between objects
Garbage Example #2
Bug
BugManager Grid
Bug
Secondary refs Primary ref
• If the user forgets to remove the secondary reference, the Bug won’t be deleted.
Primary & Secondary Pointers
• User specifies primary & secondary pointers in ADDS specification
• Primary & Secondary pointer invariant can be expressed as instrumentation predicate in 3-valued logic
• Generate shape analysis to detect leak condition
Plan of Action
• Investigate use of ADDS specs to improve refcount performance
• Generate interprocedural shape analysis from primary & secondary edge specs
• Look into other improvements from user specifications
Related Work
• ADDS work: L. Hendren and J. Hummel, Abstractions for Recursive Pointer Data Structures: Improving the Analysis and Transformation of Imperative Programs
• Shape Analysis: M. Sagiv, T. Reps and R. Wilhelm, Parametric Shape Analysis via 3-Valued Logic