180 likes | 292 Views
Specialized Reference Counting Garbage Collection using Data Structure Annotations. By 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
E N D
Specialized Reference Counting Garbage Collection using Data Structure Annotations By 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
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
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 • Programs can contain complicated, interconnected relationships between objects BugManager Grid Secondary refs Primary refs Bug Bug
Garbage Example #2 • If the user forgets to remove the secondary reference, the Bug won’t be deleted. BugManager Grid Secondary refs Primary ref Bug Bug
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