{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T20:16:13Z","timestamp":1784232973544,"version":"3.55.0"},"reference-count":61,"publisher":"Association for Computing Machinery (ACM)","issue":"PLDI","content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,6,10]]},"abstract":"<jats:p>\n                    Large-scale, revenue-critical application services are often written in Java or other memory-safe languages whose type systems do not expose immutable state. Such applications are especially exposed to garbage collection performance overheads because latency, throughput, and memory consumption are first-order concerns for service providers. We observe that: i) An important class of server applications are request-based: they scale by concurrently servicing large numbers of\n                    <jats:italic toggle=\"yes\">quasi-independent<\/jats:italic>\n                    requests. ii) Object lifetimes are strongly tied to request lifetimes. iii) Most objects remain private to the request in which they were allocated. iv) Global operations are the primary impediment to responsiveness at scale.\n                  <\/jats:p>\n                  <jats:p>\n                    If we could perform\n                    <jats:italic toggle=\"yes\">request-private garbage collection<\/jats:italic>\n                    , we might achieve both responsiveness and efficiency at scale. Unfortunately, this straightforward insight runs into significant practical problems. The most obvious of these is that a request-private collection cannot safely move objects that may be referenced outside the scope of that request, and yet moving objects is a requirement of most modern high performance collector designs. This dilemma can be sidestepped by exploiting immutability, which is unfortunately not practical in languages like Java whose type systems do not expose it. We develop Iso, a garbage collector for request-based services that exploits a mark-region heap structure to solve these impediments and deliver outstanding performance.\n                  <\/jats:p>\n                  <jats:p>The key contributions of this paper are that: i) We use opportunistic copying to solve the problem of practical thread-local garbage collection for languages without exploitable immutability. ii) We provide the first detailed analysis of the behavior of Java workloads with respect to thread-local collection, identify shortcomings of existing benchmarks and introduce a new one. iii) We design, implement, and evaluate Iso, a practical and effective request-private GC. We show that dynamic tracking of object visibility, a prerequisite for request-private GC, incurs an overhead of just 2% for important request-based workloads including Tomcat and Spring. Iso demonstrates that for suitable workloads, request-based garbage collection is extremely effective, outperforming OpenJDK with its default collector, G1, by 32% and 22% in execution time in a modest heap. This work presents the first request-private garbage collector for Java. It shows a promising way forward for highly responsive collection on an important class of large scale workloads.<\/jats:p>","DOI":"10.1145\/3729285","type":"journal-article","created":{"date-parts":[[2025,6,13]],"date-time":"2025-06-13T16:02:27Z","timestamp":1749830547000},"page":"874-896","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["Iso: Request-Private Garbage Collection"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0009-0006-6534-9176","authenticated-orcid":false,"given":"Tianle","family":"Qiu","sequence":"first","affiliation":[{"name":"Australian National University, Canberra, Australia"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-6632-6001","authenticated-orcid":false,"given":"Stephen M.","family":"Blackburn","sequence":"additional","affiliation":[{"name":"Google, Sydney, Australia"},{"name":"Australian National University, Canberra, Australia"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,6,13]]},"reference":[{"key":"e_1_3_2_2_2","doi-asserted-by":"publisher","DOI":"10.1145\/207110.207137"},{"key":"e_1_3_2_3_2","doi-asserted-by":"publisher","DOI":"10.1145\/1806651.1806655"},{"key":"e_1_3_2_4_2","doi-asserted-by":"publisher","DOI":"10.1145\/3591284"},{"key":"e_1_3_2_5_2","doi-asserted-by":"publisher","DOI":"10.1145\/1988915.1988929"},{"key":"e_1_3_2_6_2","doi-asserted-by":"publisher","DOI":"10.21236\/ADA440101"},{"key":"e_1_3_2_7_2","doi-asserted-by":"publisher","DOI":"10.1145\/3669940.3707217"},{"key":"e_1_3_2_8_2","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE.2004.1317436"},{"key":"e_1_3_2_9_2","unstructured":"Stephen M. Blackburn Robin Garner Chris Hoffmann Asjad M. Khan Kathryn S. McKinley Rotem Bentzur Amer Diwan Daniel Feinberg Daniel Frampton Samuel Z. Guyer Martin Hirzel Antony L. Hosking Maria Jump Han Bok Lee J. Eliot B. Moss Aashish Phansalkar Darko Stefanovic Thomas VanDrunen Daniel von Dincklage and Ben Wiedermann. 2007. TR-CS-07-01: The DaCapo benchmarks: Java benchmarking development and analysis (Extended Version)."},{"key":"e_1_3_2_10_2","doi-asserted-by":"publisher","DOI":"10.1145\/1375581.1375586"},{"key":"e_1_3_2_11_2","doi-asserted-by":"publisher","DOI":"10.1002\/SPE.4380180902"},{"key":"e_1_3_2_12_2","doi-asserted-by":"publisher","DOI":"10.1109\/2.846318"},{"key":"e_1_3_2_13_2","doi-asserted-by":"publisher","DOI":"10.1109\/ISPASS55109.2022.00005"},{"key":"e_1_3_2_14_2","unstructured":"Maurizio Cimadamore. 2023. JEP 442: Foreign Function & Memory API (Third Preview). https:\/\/openjdk.java.net\/jeps\/442"},{"key":"e_1_3_2_15_2","unstructured":"CloudFlare. 2024. How Workers works. https:\/\/developers.cloudflare.com\/workers\/reference\/how-workers-works\/"},{"key":"e_1_3_2_16_2","doi-asserted-by":"publisher","DOI":"10.1145\/2908080.2908106"},{"key":"e_1_3_2_17_2","doi-asserted-by":"publisher","DOI":"10.1145\/1029873.1029879"},{"key":"e_1_3_2_18_2","article-title":"Multicore OCaml","author":"Dolan Stephen","year":"2014","unstructured":"Stephen Dolan, Leo White, and Anil Madhavapeddy. 2014. Multicore OCaml. In OCaml 2014: The OCaml Users and Developers Workshop. https:\/\/anil.recoil.org\/papers\/2014-oud-multicore.pdf","journal-title":"OCaml 2014: The OCaml Users and Developers Workshop"},{"key":"e_1_3_2_19_2","doi-asserted-by":"publisher","DOI":"10.1145\/174675.174673"},{"key":"e_1_3_2_20_2","doi-asserted-by":"publisher","DOI":"10.1145\/158511.158611"},{"key":"e_1_3_2_21_2","doi-asserted-by":"publisher","DOI":"10.1145\/512429.512439"},{"key":"e_1_3_2_22_2","unstructured":"Robbin Ehn. 2017. JEP 312: Thread-Local Handshakes. https:\/\/openjdk.org\/jeps\/312"},{"key":"e_1_3_2_23_2","unstructured":"Per Lid\u00e9n et al. 2018. ZGC: The Z Garbage Collector. https:\/\/wiki.openjdk.java.net\/display\/zgc\/Main"},{"key":"e_1_3_2_24_2","doi-asserted-by":"publisher","DOI":"10.1145\/1111583.1111594"},{"key":"e_1_3_2_25_2","doi-asserted-by":"publisher","DOI":"10.1145\/363269.363280"},{"key":"e_1_3_2_26_2","doi-asserted-by":"publisher","DOI":"10.1134\/S0361768819010043"},{"key":"e_1_3_2_27_2","doi-asserted-by":"publisher","DOI":"10.1145\/2972206.2972210"},{"key":"e_1_3_2_28_2","unstructured":"The Apache Software Foundation. 2024. Apache Lucene. https:\/\/lucene.apache.org\/"},{"key":"e_1_3_2_29_2","unstructured":"The Apache Software Foundation. 2024. Apache Tomcat. https:\/\/tomcat.apache.org\/"},{"key":"e_1_3_2_30_2","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512563"},{"key":"e_1_3_2_31_2","doi-asserted-by":"publisher","DOI":"10.1145\/3178487.3178494"},{"key":"e_1_3_2_32_2","doi-asserted-by":"publisher","DOI":"10.1002\/SPE.4380200104"},{"key":"e_1_3_2_33_2","doi-asserted-by":"publisher","DOI":"10.1145\/1028976.1028983"},{"key":"e_1_3_2_34_2","unstructured":"Richard Hudson and Austin Clements. 2016. Request Oriented Collector (ROC) Algorithm. https:\/\/golang.org\/s\/gctoc"},{"key":"e_1_3_2_35_2","doi-asserted-by":"publisher","DOI":"10.1145\/1988915.1988930"},{"key":"e_1_3_2_36_2","doi-asserted-by":"publisher","DOI":"10.1109\/SCAM.2005.1"},{"key":"e_1_3_2_37_2","unstructured":"Roman Kennke. 2021. Shenandoah in OpenJDK 17: Sub-millisecond GC pauses. Blog post. https:\/\/developers.redhat.com\/articles\/2021\/09\/16\/shenandoah-openjdk-17-sub-millisecond-gc-pauses#"},{"key":"e_1_3_2_38_2","unstructured":"Roman Kennke. 2022. JDK-8291555: Implement alternative fast-locking scheme. https:\/\/bugs.openjdk.org\/browse\/JDK-8291555"},{"key":"e_1_3_2_39_2","doi-asserted-by":"publisher","DOI":"10.1145\/358141.358147"},{"key":"e_1_3_2_40_2","doi-asserted-by":"publisher","DOI":"10.1145\/1993478.1993482"},{"key":"e_1_3_2_41_2","doi-asserted-by":"publisher","DOI":"10.1145\/367177.367199"},{"key":"e_1_3_2_42_2","unstructured":"Krzysztof Palacz. 2001. JSR 121: Application Isolation API Specification. https:\/\/jcp.org\/en\/jsr\/detail?id=121"},{"key":"e_1_3_2_43_2","doi-asserted-by":"publisher","DOI":"10.1145\/582419.582444"},{"key":"e_1_3_2_44_2","unstructured":"Ron Pressler and Alan Bateman. 2023. JEP 444: Virtual Threads. https:\/\/openjdk.org\/jeps\/444"},{"key":"e_1_3_2_45_2","doi-asserted-by":"publisher","unstructured":"Tianle Qiu and Stephen M. Blackburn. 2025. Iso Artifact. https:\/\/doi.org\/10.5281\/zenodo.1531368710.5281\/zenodo.15313687","DOI":"10.5281\/zenodo.15313687"},{"key":"e_1_3_2_46_2","doi-asserted-by":"publisher","DOI":"10.1145\/363534.363546"},{"key":"e_1_3_2_47_2","doi-asserted-by":"publisher","DOI":"10.1145\/3408995"},{"key":"e_1_3_2_48_2","doi-asserted-by":"publisher","DOI":"10.1145\/362422.362432"},{"key":"e_1_3_2_49_2","unstructured":"Peter Styger. 1967. LISP 2 garbage collector specifications. Technical Report TM-3417\/500\/00. System Development Cooperation Santa Monica. https:\/\/www.softwarepreservation.org\/projects\/LISP\/lisp2\/TM-3417_500_00_LISP2_GC_Spec.pdf"},{"key":"e_1_3_2_50_2","doi-asserted-by":"publisher","DOI":"10.1145\/1993478.1993491"},{"key":"e_1_3_2_51_2","unstructured":"V8. 2024. V8 Isolate Class Reference. https:\/\/v8docs.nodesource.com\/node-0.8\/d5\/dda\/classv8_1_1_isolate.html"},{"key":"e_1_3_2_52_2","unstructured":"VMWare. 2024. Spring. https:\/\/spring.io\/"},{"key":"e_1_3_2_53_2","volume-title":"Efficient and Scalable Parallel Functional Programming Through Disentanglement","author":"Westrick Sam","year":"2022","unstructured":"Sam Westrick. 2022. Efficient and Scalable Parallel Functional Programming Through Disentanglement. Ph.D.Dissertation. Carnegie Mellon University."},{"key":"e_1_3_2_54_2","doi-asserted-by":"publisher","DOI":"10.1145\/3547646"},{"key":"e_1_3_2_55_2","doi-asserted-by":"publisher","DOI":"10.1145\/57669.57679"},{"key":"e_1_3_2_56_2","doi-asserted-by":"publisher","DOI":"10.1145\/74877.74882"},{"key":"e_1_3_2_57_2","unstructured":"Christian Wimmer. 2019. Isolates and Compressed References: More Flexible and Efficient Memory Management via GraalVM. https:\/\/medium.com\/graalvm\/isolates-and-compressed-references-more-flexible-and-efficient-memory-management-for-graalvm-a044cc50b67e"},{"key":"e_1_3_2_58_2","doi-asserted-by":"publisher","DOI":"10.1145\/3360610"},{"key":"e_1_3_2_59_2","unstructured":"Xi Yang. 2024. Add multi-producer and inflight request control for the Kafka benchmark. https:\/\/github.com\/dacapobench\/dacapobench\/pull\/268"},{"key":"e_1_3_2_60_2","doi-asserted-by":"publisher","DOI":"10.1145\/2258996.2259004"},{"key":"e_1_3_2_61_2","doi-asserted-by":"publisher","DOI":"10.1145\/3381052.3381320"},{"key":"e_1_3_2_62_2","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\/pdf\/10.1145\/3729285","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:06:10Z","timestamp":1784196370000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3729285"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,6,10]]},"references-count":61,"journal-issue":{"issue":"PLDI","published-print":{"date-parts":[[2025,6,10]]}},"alternative-id":["10.1145\/3729285"],"URL":"https:\/\/doi.org\/10.1145\/3729285","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,6,10]]},"assertion":[{"value":"2024-11-15","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-03-06","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-06-13","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}