Reference-counting subsumption analysis
First Claim
1. A method of lowering a number of reference-counting updates in a program utilizing reference-counting garbage collection, the method comprising:
- determining subsumed references which are subsumed by subsuming references in the program; and
removing reference-counting updates on the subsumed references;
wherein a first reference is considered to be subsumed by a second reference when the first and second references satisfy the following conditions;
1) every live range of the first reference is contained in a live range of the second reference;
2) the first reference is never live through a redefinition of either the first or the second reference; and
3) a set of every object which is reachable from the first reference is a subset of a set of every object which is reachable from the second reference;
wherein determining references which are subsumed by other references in the program comprises;
generating a reference-counting subsumption graph for each of one or more functions in the program by;
(a) building a live-range subsumption graph for the function;
(b) building an uncut live-range subsumption graph for the function; and
(c) building the reference-counting subsumption graph for the function; and
analyzing the reference-counting subsumption graph to determine which references are represented in the graph as being subsumed by other references.
2 Assignments
0 Petitions
Accused Products
Abstract
An eager reference-counting garbage collection system performs a static analysis on the intermediate representation of a program. The system then uses liveness information to inject eager reference-counting updates into the program. Through the use of the liveness information, reference-counting decrements can be made earlier in execution than in traditional reference-counting schemes, freeing up memory more efficiently. Additionally, a reference-counting subsumption optimization tool identifies redundant reference-counting updates and removes them, lowering the number of garbage collection update calls and improving execution throughput. Reference-counting subsumption can also be used as a throughput enhancer in traditional reference-counting schemes that maintain up-to-date tallies of references from the stack.
-
Citations
13 Claims
-
1. A method of lowering a number of reference-counting updates in a program utilizing reference-counting garbage collection, the method comprising:
-
determining subsumed references which are subsumed by subsuming references in the program; and removing reference-counting updates on the subsumed references; wherein a first reference is considered to be subsumed by a second reference when the first and second references satisfy the following conditions; 1) every live range of the first reference is contained in a live range of the second reference; 2) the first reference is never live through a redefinition of either the first or the second reference; and 3) a set of every object which is reachable from the first reference is a subset of a set of every object which is reachable from the second reference; wherein determining references which are subsumed by other references in the program comprises; generating a reference-counting subsumption graph for each of one or more functions in the program by; (a) building a live-range subsumption graph for the function; (b) building an uncut live-range subsumption graph for the function; and (c) building the reference-counting subsumption graph for the function; and analyzing the reference-counting subsumption graph to determine which references are represented in the graph as being subsumed by other references. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9)
-
-
10. A computer-implemented program analysis system for determining redundant reference-counting updates in a program, the system comprising:
-
one or more computer processors; and a reference-counting subsumption analysis module operable to execute on the one or more computer processors, the module configured to accept a control-flow graph for a program and produce one or more reference-counting subsumption graphs which indicate references in the control-flow graph that are subsumed by other references; wherein the reference-counting subsumption analysis module comprises; a live-range subsumption graph module configured to generate one or more live-range subsumption graphs from the control flow graph, wherein each live-range subsumption graph indicates a relation between a first and a second reference if every live range of the first reference is contained in a live range of the second reference; an uncut live-range subsumption graph module, configured to generate one or more uncut live-range subsumption graphs from the one or more live-range subsumption graphs, wherein each uncut live-range subsumption graph indicates a relation between a third and a fourth reference if the third reference is never live through a redefinition of either the third or the fourth reference; and a reference-counting subsumption graph module, configured to generate one or more reference-counting subsumption graph from the one or more uncut live-range subsumption graphs, wherein each reference-counting subsumption graph indicates a relation between a fifth and a sixth reference if a set of objects reachable from the fifth reference is always a subset of a set of objects reachable from the sixth reference. - View Dependent Claims (11)
-
-
12. One or more storage media comprising computer-executable instructions for performing a method for identifying unnecessary reference-counting updates in a function contained in a program that uses reference-counting garbage collection, the method comprising:
-
determining references which are subsumed in the function; and removing reference-counting updates for the subsumed references from the function; wherein a first reference is considered to be subsumed by a second reference when the first and second references satisfy the following conditions; 1) every live range of the first reference is contained in a live range of the second reference; 2) the first reference is never live through a redefinition of either the first or the second reference; and 3) a set of every object which is reachable from the first reference is a subset of a set of every object which is reachable from the second reference; wherein determining subsumed references comprises; determining the three conditions for a third reference and a fourth reference in the function by; (a) generating a reference-counting subsumption graph; and (b) using information represented in the reference-counting subsumption graph for the third and fourth references to identify whether reference-counting updates to the a reference out of the third and fourth references are unnecessary; and if the conditions are met, considering the third reference to be subsumed by the fourth reference. - View Dependent Claims (13)
-
Specification