{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:32:27Z","timestamp":1750307547175,"version":"3.41.0"},"reference-count":46,"publisher":"Association for Computing Machinery (ACM)","issue":"4","license":[{"start":{"date-parts":[[2009,10,1]],"date-time":"2009-10-01T00:00:00Z","timestamp":1254355200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Archit. Code Optim."],"published-print":{"date-parts":[[2009,10]]},"abstract":"<jats:p>Compactors that move or copy objects need to adjust pointers. In extant compactors, pointer adjustment involves inspecting every pointer in the heap and computing the target address for each pointer. At the same time, in modern Managed Runtime Environments (MREs), only a fraction of pointers in the heap changes during compaction. This is because state-of-the-art MREs do not compact the prefix of the heap that contains few dead objects, allowing gaps between live objects and tolerating small space overhead.<\/jats:p>\n          <jats:p>We describe the design and implementation of the Single-Referent Collector (SRC), a new compactor that reduces the cost of pointer manipulation by avoiding inspection and adjustment of pointers that do not change. SRC exploits the fact that in modern applications, most live objects have only one incoming pointer. For such objects, SRC stores the address of the referent in the object header. Only objects that move have their referent inspected and adjusted. The remaining pointers in the heap are not processed. SRC uses an overflow table to handle objects with multiple incoming pointers.<\/jats:p>\n          <jats:p>We investigate a number of standard benchmarks and open-source applications to substantiate key statistical observations that underlie the design of SRC. We implement SRC in the HotSpot JVM as part of a generational collection system and compare it empirically with the Lisp2 compactor. We find that, by decreasing the cost of pointer processing, SRC enables significant reduction in pause times and improves application throughput.<\/jats:p>","DOI":"10.1145\/1596510.1596513","type":"journal-article","created":{"date-parts":[[2009,10,27]],"date-time":"2009-10-27T13:28:14Z","timestamp":1256650094000},"page":"1-26","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":0,"title":["The single-referent collector"],"prefix":"10.1145","volume":"6","author":[{"given":"Michal","family":"Wegiel","sequence":"first","affiliation":[{"name":"University of California, Santa Barbara"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Chandra","family":"Krintz","sequence":"additional","affiliation":[{"name":"University of California, Santa Barbara"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2009,10,29]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/1028976.1028995"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949329"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949328"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/512429.512442"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/1167473.1167488"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/1167473.1167488"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949336"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/1375581.1375586"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/113446.113459"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/1064979.1064988"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/69575.357226"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/1029873.1029879"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/360336.360345"},{"volume-title":"Proceedings of 12th European Conference on Object-Oriented Programming (ECOOP98)","author":"Dieckmann S.","key":"e_1_2_1_14_1","unstructured":"Dieckmann , S. and H\u00f6lzle , U . 1998. A study of the allocation behavior of the SPECjvm98 Java benchmarks . In Proceedings of 12th European Conference on Object-Oriented Programming (ECOOP98) .Springer-Verlag, Berlin, 92--115. Dieckmann, S. and H\u00f6lzle, U. 1998. A study of the allocation behavior of the SPECjvm98 Java benchmarks. In Proceedings of 12th European Conference on Object-Oriented Programming (ECOOP98).Springer-Verlag, Berlin, 92--115."},{"key":"e_1_2_1_15_1","volume-title":"Lecture Notes in Computer Science","volume":"46","author":"Dijkstra E. W.","unstructured":"Dijkstra , E. W. , Lamport , L. , Martin , A. J. , Scholten , C. S. , and Steffens , E. F. M. 1976. On-the-fly garbage collection: An exercise in cooperation . Lecture Notes in Computer Science , vol. 46 . Springer-Verlag, Berlin. Dijkstra, E. W., Lamport, L., Martin, A. J., Scholten, C. S., and Steffens, E. F. M. 1976. On-the-fly garbage collection: An exercise in cooperation. Lecture Notes in Computer Science, vol. 46. Springer-Verlag, Berlin."},{"key":"e_1_2_1_16_1","volume-title":"Proceedings of the 4th International Symposium on Memory Management. ACM Press.","author":"Diwan A., Ed.","year":"2004","unstructured":"Diwan , A., Ed. 2004 . Proceedings of the 4th International Symposium on Memory Management. ACM Press. Diwan, A., Ed. 2004. Proceedings of the 4th International Symposium on Memory Management. ACM Press."},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/158511.158611"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/349299.349336"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1016\/0020-0190(74)90044-1"},{"volume-title":"Proceedings of the Usenix Java Virtual Machine Research and Technology Symposium (JVM '01)","author":"Flood C.","key":"e_1_2_1_20_1","unstructured":"Flood , C. , Detlefs , D. , Shavit , N. , and Zhang , C . 2001. Parallel garbage collection for shared memory multiprocessors . In Proceedings of the Usenix Java Virtual Machine Research and Technology Symposium (JVM '01) . Flood, C., Detlefs, D., Shavit, N., and Zhang, C. 2001. Parallel garbage collection for shared memory multiprocessors. In Proceedings of the Usenix Java Virtual Machine Research and Technology Symposium (JVM '01)."},{"volume-title":"Proceedings of the ACM Conference on Object-Oriented Systems, Languages and Applications (OOPSLA'91)","author":"Furusou S.","key":"e_1_2_1_21_1","unstructured":"Furusou , S. , Matsuoka , S. , and Yonezawa , A . 1991. Parallel conservative garbage collection with fast allocation . In Proceedings of the ACM Conference on Object-Oriented Systems, Languages and Applications (OOPSLA'91) . ACM, New York. Furusou, S., Matsuoka, S., and Yonezawa, A. 1991. Parallel conservative garbage collection with fast allocation. In Proceedings of the ACM Conference on Object-Oriented Systems, Languages and Applications (OOPSLA'91). ACM, New York."},{"key":"e_1_2_1_22_1","unstructured":"GPLJava. Open Source Java Software. http:\/\/java-source.net.  GPLJava. Open Source Java Software. http:\/\/java-source.net."},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/1133956.1133963"},{"key":"e_1_2_1_24_1","unstructured":"HotSpot JVM GC. HotSpot JVM GC. http:\/\/java.sun.com\/javase\/technologies\/hotspot\/gc\/index.jsp.  HotSpot JVM GC. HotSpot JVM GC. http:\/\/java.sun.com\/javase\/technologies\/hotspot\/gc\/index.jsp."},{"key":"e_1_2_1_25_1","volume-title":"Garbage Collection: Algorithms for Automatic Dynamic Memory Management","author":"Jones R. E.","year":"1996","unstructured":"Jones , R. E. 1996 . Garbage Collection: Algorithms for Automatic Dynamic Memory Management . Wiley , New York . (With a chapter on Distributed Garbage Collection by R. Lins.) Jones, R. E. 1996. Garbage Collection: Algorithms for Automatic Dynamic Memory Management. Wiley, New York. (With a chapter on Distributed Garbage Collection by R. Lins.)"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1016\/0020-0190(79)90103-0"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/1133981.1134023"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/29650.29677"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/286860.286861"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/1111596.1111597"},{"key":"e_1_2_1_31_1","unstructured":"Lieberman H. and Hewitt C. E. 1981. A real-time garbage collector based on the lifetimes of objects. AI Memo 569a MIT Cambridge MA.  Lieberman H. and Hewitt C. E. 1981. A real-time garbage collector based on the lifetimes of objects. AI Memo 569a MIT Cambridge MA."},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/358589.358625"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/359576.359583"},{"key":"e_1_2_1_34_1","unstructured":"OpenJDK. Open Source J2SE. http:\/\/openjdk.java.net.  OpenJDK. Open Source J2SE. http:\/\/openjdk.java.net."},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512546"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/1029873.1029877"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/362422.362480"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949335"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/1028976.1028984"},{"key":"e_1_2_1_40_1","unstructured":"SPEC. SPEC Java Benchmarks. http:\/\/www.spec.org.  SPEC. SPEC Java Benchmarks. http:\/\/www.spec.org."},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/361002.361005"},{"key":"e_1_2_1_42_1","unstructured":"VolanoMark. The VolanoMark Benchmark. http:\/\/www.volano.com\/benchmarks.html  VolanoMark. The VolanoMark Benchmark. http:\/\/www.volano.com\/benchmarks.html"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/1346281.1346294"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/1508244.1508278"},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.5555\/645648.664824"},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","DOI":"10.1016\/0164-1212(90)90084-Y"}],"container-title":["ACM Transactions on Architecture and Code Optimization"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1596510.1596513","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1596510.1596513","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T12:23:32Z","timestamp":1750249412000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1596510.1596513"}},"subtitle":["Optimizing compaction for the common case"],"short-title":[],"issued":{"date-parts":[[2009,10]]},"references-count":46,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2009,10]]}},"alternative-id":["10.1145\/1596510.1596513"],"URL":"https:\/\/doi.org\/10.1145\/1596510.1596513","relation":{},"ISSN":["1544-3566","1544-3973"],"issn-type":[{"type":"print","value":"1544-3566"},{"type":"electronic","value":"1544-3973"}],"subject":[],"published":{"date-parts":[[2009,10]]},"assertion":[{"value":"2008-04-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2009-06-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2009-10-29","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}