{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:49:08Z","timestamp":1750308548149,"version":"3.41.0"},"reference-count":46,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2018,10,24]],"date-time":"2018-10-24T00:00:00Z","timestamp":1540339200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by-nc-nd\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2018,10,24]]},"abstract":"<jats:p>Embedding a modern language runtime as a component in a larger software system is popular these days. Communication between these systems often requires keeping references to each others' objects. In this paper we present and discuss the problem of cross-component memory management where reference cycles across component boundaries may lead to memory leaks and premature reclamation of objects may lead to dangling cross-component references. We provide a generic algorithm for effective, efficient, and safe garbage collection over component boundaries, which we call cross-component tracing. We designed and implemented cross-component tracing in the Chrome web browser where the JavaScript virtual machine V8 is embedded into the rendering engine Blink. Cross-component tracing from V8's JavaScript heap to Blink's C++ heap improves garbage collection latency and eliminates long-standing memory leaks for real websites in Chrome. We show how cross-component tracing can help web developers to reason about reachability and retainment of objects spanning both V8 and Blink components based on Chrome's heap snapshot memory tool. Cross-component tracing was enabled by default for all websites in Chrome version 57 and is also deployed in other widely used software systems such as Opera, Cobalt, and Electron.<\/jats:p>","DOI":"10.1145\/3276521","type":"journal-article","created":{"date-parts":[[2018,10,24]],"date-time":"2018-10-24T11:57:18Z","timestamp":1540382238000},"page":"1-24","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":8,"title":["Cross-component garbage collection"],"prefix":"10.1145","volume":"2","author":[{"given":"Ulan","family":"Degenbaev","sequence":"first","affiliation":[{"name":"Google, Germany"}]},{"given":"Jochen","family":"Eisinger","sequence":"additional","affiliation":[{"name":"Google, Germany"}]},{"given":"Kentaro","family":"Hara","sequence":"additional","affiliation":[{"name":"Google, Japan"}]},{"given":"Marcel","family":"Hlopko","sequence":"additional","affiliation":[{"name":"Google, Germany"}]},{"given":"Michael","family":"Lippautz","sequence":"additional","affiliation":[{"name":"Google, Germany"}]},{"given":"Hannes","family":"Payer","sequence":"additional","affiliation":[{"name":"Google, Germany"}]}],"member":"320","published-online":{"date-parts":[[2018,10,24]]},"reference":[{"volume-title":"Oilpan: Tracing Garbage Collection for Blink.","year":"2013","author":"Ager M.","key":"e_1_2_2_1_1"},{"volume-title":"Proceedings of the 15th European Conference on Object-Oriented Programming (ECOOP \u201901)","author":"Bacon D. F.","key":"e_1_2_2_2_1"},{"key":"e_1_2_2_3_1","unstructured":"J. F. Bartlett. 1989. Mostly-Copying Garbage Collection picks up Generations and C++. Technical Note TN\u201312. http: \/\/www.hpl.hp.com\/techreports\/Compaq-DEC\/WRL-TN-12.pdf  J. F. Bartlett. 1989. Mostly-Copying Garbage Collection picks up Generations and C++. Technical Note TN\u201312. http: \/\/www.hpl.hp.com\/techreports\/Compaq-DEC\/WRL-TN-12.pdf"},{"volume-title":"OOPSLA\u201991 GC workshop report.","author":"Boehm H.-J.","key":"e_1_2_2_4_1"},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380180902"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/1735935.1735956"},{"volume-title":"Finding and Preventing Bugs in JavaScript Bindings. In 2017 IEEE Symposium on Security and Privacy, SP 2017","year":"2017","author":"Brown F.","key":"e_1_2_2_7_1"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/74877.74884"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/362790.362798"},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378823"},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1007\/11924661_20"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380140602"},{"key":"e_1_2_2_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/2754169.2754181"},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/2602988.2602994"},{"key":"e_1_2_2_15_1","unstructured":"Cobalt Project Authors. 2018. Cobalt. Retrieved September 6 2018 from https:\/\/cobalt.foo\/  Cobalt Project Authors. 2018. Cobalt. Retrieved September 6 2018 from https:\/\/cobalt.foo\/"},{"volume-title":"USENIX 2008 Annual Technical Conference (ATC\u201908)","author":"Craciunas S. S.","key":"e_1_2_2_16_1"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2908080.2908106"},{"volume-title":"In Proceedings of the 1992 Usenix C++ Conference. USENIX Association, 37\u201356","year":"1992","author":"Detlefs D.","key":"e_1_2_2_19_1"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/359642.359655"},{"key":"e_1_2_2_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/143165.143178"},{"volume-title":"Blink heap compaction. (2016). Retrieved","year":"2018","author":"Finne S.","key":"e_1_2_2_22_1"},{"volume-title":"Retrieved","year":"2018","author":"Geidel J.","key":"e_1_2_2_23_1"},{"key":"e_1_2_2_24_1","unstructured":"Google. 2018. Telemetry. Retrieved September 6 2018 from https:\/\/github.com\/catapult-project\/catapult  Google. 2018. Telemetry. Retrieved September 6 2018 from https:\/\/github.com\/catapult-project\/catapult"},{"key":"e_1_2_2_25_1","unstructured":"M. Hablich and H. Payer. 2018. Lessons Learned from the Memory Roadshow. Retrieved September 6 2018 from https:\/\/drive.google.com\/file\/d\/1HyRDBgt6wvftC-_cne_3zuYbVtp1RoJD  M. Hablich and H. Payer. 2018. Lessons Learned from the Memory Roadshow. Retrieved September 6 2018 from https:\/\/drive.google.com\/file\/d\/1HyRDBgt6wvftC-_cne_3zuYbVtp1RoJD"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/800055.802017"},{"key":"e_1_2_2_27_1","unstructured":"M. Hollander D. A. Wolfe and E. Chicken. 2013. Nonparametric statistical methods. John Wiley &amp; Sons.  M. Hollander D. A. Wolfe and E. Chicken. 2013. Nonparametric statistical methods. John Wiley &amp; Sons."},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/263698.264353"},{"key":"e_1_2_2_29_1","doi-asserted-by":"publisher","DOI":"10.5555\/5280.5296"},{"key":"e_1_2_2_30_1","doi-asserted-by":"crossref","unstructured":"R. Jones A. Hosking and E. Moss. 2012. The Garbage Collection Handbook: The Art of Automatic Memory Management. Chapman &amp; Hall.   R. Jones A. Hosking and E. Moss. 2012. The Garbage Collection Handbook: The Art of Automatic Memory Management. Chapman &amp; Hall.","DOI":"10.1201\/9781315388021"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/1993478.1993492"},{"volume-title":"Proceedings of the 12th International Conference on Distributed Computing Systems. 708\u2013715","author":"Ladin R.","key":"e_1_2_2_32_1"},{"key":"e_1_2_2_33_1","unstructured":"Mozilla Contributors. 2011. MMgc. Retrieved September 6 2018 from https:\/\/developer.mozilla.org\/en-US\/docs\/Archive\/ MMgc  Mozilla Contributors. 2011. MMgc. Retrieved September 6 2018 from https:\/\/developer.mozilla.org\/en-US\/docs\/Archive\/ MMgc"},{"volume-title":"The XPCOM cycle collector. Retrieved","year":"2018","author":"Contributors Mozilla","key":"e_1_2_2_34_1"},{"key":"e_1_2_2_35_1","unstructured":"NativeScript. 2018. Nativescript. Retrieved September 6 2018 from https:\/\/www.nativescript.org  NativeScript. 2018. Nativescript. Retrieved September 6 2018 from https:\/\/www.nativescript.org"},{"key":"e_1_2_2_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/1542431.1542434"},{"volume-title":"Retrieved","year":"2018","author":"Oracle Corporation","key":"e_1_2_2_37_1"},{"volume-title":"Introducing Riptide: WebKit\u2019s Retreating Wavefront Concurrent Garbage Collector. Retrieved","year":"2017","author":"Pizlo F.","key":"e_1_2_2_38_1"},{"volume-title":"Proceedings of the International Workshop on Memory Management (IWMM \u201995)","author":"Plainfoss\u00e9 D.","key":"e_1_2_2_39_1"},{"key":"e_1_2_2_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/582419.582422"},{"volume-title":"Synchronizing GC in Java and V8. Retrieved","year":"2018","author":"Slavchev M.","key":"e_1_2_2_41_1"},{"volume-title":"Memory management in NativeScript for Android. Retrieved","year":"2018","author":"Slavchev M.","key":"e_1_2_2_42_1"},{"key":"e_1_2_2_43_1","doi-asserted-by":"publisher","DOI":"10.1109\/MIC.2010.145"},{"key":"e_1_2_2_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/800020.808261"},{"volume-title":"Fall cleaning: Optimizing V8 memory consumption. Retrieved","year":"2018","author":"Authors Project","key":"e_1_2_2_45_1"},{"key":"e_1_2_2_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/3192366.3192376"},{"key":"e_1_2_2_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491894.2466481"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3276521","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3276521","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T19:03:39Z","timestamp":1750273419000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3276521"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2018,10,24]]},"references-count":46,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2018,10,24]]}},"alternative-id":["10.1145\/3276521"],"URL":"https:\/\/doi.org\/10.1145\/3276521","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2018,10,24]]},"assertion":[{"value":"2018-10-24","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}