{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,6,9]],"date-time":"2026-06-09T08:46:16Z","timestamp":1780994776828,"version":"3.54.1"},"reference-count":36,"publisher":"Association for Computing Machinery (ACM)","issue":"PLDI","license":[{"start":{"date-parts":[[2024,6,20]],"date-time":"2024-06-20T00:00:00Z","timestamp":1718841600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"name":"Samsung Research Funding & Incubation Center of Samsung Electronics","award":["SRFC-IT2201-06"],"award-info":[{"award-number":["SRFC-IT2201-06"]}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2024,6,20]]},"abstract":"<jats:p>Memory management for optimistic concurrency in unmanaged programming languages is challenging. Safe memory reclamation (SMR) algorithms help address this, but they are difficult to use correctly. Automatic reference counting provides a simpler interface, but it has been less efficient than SMR algorithms. Recently, there has been a push to apply the optimizations used in garbage collectors for managed languages to elide reference count updates from local references. Notably, Fast Reference Counter, OrcGC, and Concurrent Deferred Reference Counting use SMR algorithms to protect local references by deferring decrements or reclamation. While they show a significant performance improvement, their use of deferral may result in growing memory usage due to slow reclamation of linked structures, and suboptimal performance in update-heavy workloads.<\/jats:p>\n          <jats:p>\n            We present\n            <jats:italic toggle=\"yes\">Concurrent Immediate Reference Counting<\/jats:italic>\n            (CIRC), a new combination of SMR algorithms with reference counting. CIRC employs deferral like other modern methods, but it avoids their problems with novel algorithms for (1) immediately reclaiming linked structures recursively by tracking the reachability of each object, and (2) applying decrements immediately and deferring only the reclamation. Our experiments show that CIRC\u2019s memory usage does not grow over time and is only slightly higher than the underlying SMR. Moreover, CIRC further narrows the performance gap between the underlying SMR, positioning it as a promising solution to safe automatic memory management for highly concurrent data structures in unmanaged languages.\n          <\/jats:p>","DOI":"10.1145\/3656383","type":"journal-article","created":{"date-parts":[[2024,6,20]],"date-time":"2024-06-20T16:27:20Z","timestamp":1718900840000},"page":"151-174","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":6,"title":["Concurrent Immediate Reference Counting"],"prefix":"10.1145","volume":"8","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-6099-2644","authenticated-orcid":false,"given":"Jaehwang","family":"Jung","sequence":"first","affiliation":[{"name":"KAIST, Daejeon, South Korea"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0009-0000-7070-3578","authenticated-orcid":false,"given":"Jeonghyeon","family":"Kim","sequence":"additional","affiliation":[{"name":"KAIST, Daejeon, South Korea"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0009-0004-3937-1260","authenticated-orcid":false,"given":"Matthew J.","family":"Parkinson","sequence":"additional","affiliation":[{"name":"Microsoft Azure, Cambridge, United Kingdom"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-2115-0871","authenticated-orcid":false,"given":"Jeehoon","family":"Kang","sequence":"additional","affiliation":[{"name":"KAIST, Daejeon, South Korea"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2024,6,20]]},"reference":[{"key":"e_1_3_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/3453483.3454060"},{"key":"e_1_3_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/3519939.3523730"},{"key":"e_1_3_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378819"},{"key":"e_1_3_1_5_1","doi-asserted-by":"publisher","unstructured":"Hans-Juergen Boehm and Mark Weiser. 1988. Garbage Collection in an Uncooperative Environment. 18 9 (1988) 807-820. https:\/\/doi.org\/10.1002\/spe.4380180902 10.1002\/spe.4380180902","DOI":"10.1002\/spe.4380180902"},{"key":"e_1_3_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/2767386.2767436"},{"key":"e_1_3_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814270.2814298"},{"key":"e_1_3_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/3437801.3441596"},{"key":"e_1_3_1_9_1","unstructured":"Crossbeam Developers. 2023. Crossbeam. https:\/\/github.com\/crossbeam-rs\/crossbeam"},{"key":"e_1_3_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/360336.360345"},{"key":"e_1_3_1_11_1","unstructured":"Dave Dice Hui Huang and Mingyao Yang. 2001. Asymmetric Dekker Synchronization. http:\/\/web.archive.org\/web\/20080220051535\/http:\/\/blogs.sun.com\/dave\/resource\/Asymmetric-Dekker-Synchronization.txt"},{"key":"e_1_3_1_12_1","unstructured":"Jason Evans. 2006. A scalable concurrent malloc (3) implementation for FreeBSD."},{"key":"e_1_3_1_13_1","volume-title":"Practical lock-freedom.","author":"Fraser Keir","year":"2004","unstructured":"Keir Fraser. 2004. Practical lock-freedom. Ph. D. Dissertation. University of Cambridge, Computer Laboratory."},{"key":"e_1_3_1_14_1","unstructured":"David Goldblatt. 2022. P1202R5: Asymmetric Fences. https:\/\/wg21.link\/p1202r5."},{"key":"e_1_3_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/1062247.1062249"},{"key":"e_1_3_1_16_1","doi-asserted-by":"publisher","unstructured":"Jaehwang Jung Jeonghyeon Kim Matthew J. Parkinson and Jeehoon Kang. 2024. Concurrent Immediate Reference Counting (artifact and appendix). https:\/\/doi.org\/10.5281\/zenodo.10806736 10.5281\/zenodo.10806736 Project webpage: https:\/\/cp.kaist.ac.kr\/gc.","DOI":"10.5281\/zenodo.10806736"},{"key":"e_1_3_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/504282.504309"},{"key":"e_1_3_1_18_1","volume-title":"PDCS \u201898.","author":"McKenney P. E.","year":"1998","unstructured":"P. E. McKenney and J. D. Slingwine. 1998. Read-copy update: Using execution history to solve concurrency problems. In PDCS \u201898."},{"key":"e_1_3_1_19_1","unstructured":"Meta. 2023. Folly: Facebook Open-source Library. https:\/\/github.com\/facebook\/folly"},{"key":"e_1_3_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/564870.564881"},{"key":"e_1_3_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/571825.571829"},{"key":"e_1_3_1_22_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2004.8"},{"key":"e_1_3_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/3382734.3405738"},{"key":"e_1_3_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/248052.248106"},{"key":"e_1_3_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/2555243.2555256"},{"key":"e_1_3_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/3453483.3454090"},{"key":"e_1_3_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/3141879"},{"key":"e_1_3_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3591195.3595271"},{"key":"e_1_3_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/3087556.3087588"},{"key":"e_1_3_1_30_1","unstructured":"Pedro Ramalhete and Andreia Correia. 2017b. DoubleLink \u2013 A Low-Overhead Lock-Free Queue. https:\/\/concurrencyfreaks.blogspot.com\/2017\/01\/doublelink-low-overhead-lock-free-queue.html"},{"key":"e_1_3_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/2660193.2660198"},{"key":"e_1_3_1_32_1","unstructured":"Nir N Shavit Yosef Lev and Maurice P Herlihy. 2011. Concurrent lock-free skiplist with wait-free contains operator. https:\/\/patentcenter.uspto.gov\/applications\/12191008 USPatent 7 937 378."},{"key":"e_1_3_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/3210563.3210569"},{"key":"e_1_3_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/3178487.3178488"},{"key":"e_1_3_1_35_1","volume-title":"C++ Concurrency in Action, 2E","author":"Williams Anthony","year":"2019","unstructured":"Anthony Williams. 2019. C++ Concurrency in Action, 2E (2 ed.). Manning Publications, New York, NY.","edition":"2"},{"key":"e_1_3_1_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/3092255.3092274"},{"key":"e_1_3_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/3519939.3523440"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3656383","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3656383","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,7,4]],"date-time":"2025-07-04T20:44:50Z","timestamp":1751661890000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3656383"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2024,6,20]]},"references-count":36,"journal-issue":{"issue":"PLDI","published-print":{"date-parts":[[2024,6,20]]}},"alternative-id":["10.1145\/3656383"],"URL":"https:\/\/doi.org\/10.1145\/3656383","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2024,6,20]]},"assertion":[{"value":"2024-06-20","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}