{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,7,20]],"date-time":"2025-07-20T03:27:05Z","timestamp":1752982025498,"version":"3.41.0"},"reference-count":63,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2017,10,12]],"date-time":"2017-10-12T00:00:00Z","timestamp":1507766400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by-nd\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2017,10,12]]},"abstract":"<jats:p>Garbage collection greatly improves programmer productivity and ensures memory safety. Manual memory management on the other hand often delivers better performance but is typically unsafe and can lead to system crashes or security vulnerabilities. We propose integrating safe manual memory management with garbage collection in the .NET runtime to get the best of both worlds. In our design, programmers can choose between allocating objects in the garbage collected heap or the manual heap. All existing applications run unmodified, and without any performance degradation, using the garbage collected heap.<\/jats:p>\n          <jats:p>Our programming model for manual memory management is flexible: although objects in the manual heap can have a single owning pointer, we allow deallocation at any program point and concurrent sharing of these objects amongst all the threads in the program. Experimental results from our .NET CoreCLR implementation on real-world applications show substantial performance gains especially in multithreaded scenarios: up to 3x savings in peak working sets and 2x improvements in runtime.<\/jats:p>","DOI":"10.1145\/3141879","type":"journal-article","created":{"date-parts":[[2017,10,13]],"date-time":"2017-10-13T15:15:45Z","timestamp":1507907745000},"page":"1-25","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":8,"title":["Project snowflake: non-blocking safe manual memory management in .NET"],"prefix":"10.1145","volume":"1","author":[{"given":"Matthew","family":"Parkinson","sequence":"first","affiliation":[{"name":"Microsoft Research, UK"}]},{"given":"Dimitrios","family":"Vytiniotis","sequence":"additional","affiliation":[{"name":"Microsoft Research, UK"}]},{"given":"Kapil","family":"Vaswani","sequence":"additional","affiliation":[{"name":"Microsoft Research, UK"}]},{"given":"Manuel","family":"Costa","sequence":"additional","affiliation":[{"name":"Microsoft Research, UK"}]},{"given":"Pantazis","family":"Deligiannis","sequence":"additional","affiliation":[{"name":"Microsoft Research, UK"}]},{"given":"Dylan","family":"McDermott","sequence":"additional","affiliation":[{"name":"University of Cambridge, UK"}]},{"given":"Aaron","family":"Blankstein","sequence":"additional","affiliation":[{"name":"Princeton University, USA"}]},{"given":"Jonathan","family":"Balkind","sequence":"additional","affiliation":[{"name":"Princeton University, USA"}]}],"member":"320","published-online":{"date-parts":[[2017,10,12]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"USENIX Security Symposium. 177\u2013192","author":"Akritidis Periklis","year":"2010","unstructured":"Periklis Akritidis . 2010 . Cling: A Memory Allocator to Mitigate Dangling Pointers .. In USENIX Security Symposium. 177\u2013192 . Periklis Akritidis. 2010. Cling: A Memory Allocator to Mitigate Dangling Pointers.. In USENIX Security Symposium. 177\u2013192."},{"key":"e_1_2_1_2_1","doi-asserted-by":"crossref","unstructured":"Dan Alistarh William M. Leiserson Alexander Matveev and Nir Shavit. 2015. ThreadScan: Automatic and Scalable Memory Reclamation. In SPAA.  Dan Alistarh William M. Leiserson Alexander Matveev and Nir Shavit. 2015. ThreadScan: Automatic and Scalable Memory Reclamation. In SPAA.","DOI":"10.1145\/2755573.2755600"},{"key":"e_1_2_1_3_1","unstructured":"ASP.Net. 2017. ASP.Net\/Caching: Libraries for in-memory caching and distributed caching. https:\/\/github.com\/aspnet\/ Caching . (2017).  ASP.Net. 2017. ASP.Net\/Caching: Libraries for in-memory caching and distributed caching. https:\/\/github.com\/aspnet\/ Caching . (2017)."},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378819"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-39962-9_52"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/199818.199860"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2935764.2935790"},{"volume-title":"Acm sigplan notices","author":"Berger Emery D","key":"e_1_2_1_8_1","unstructured":"Emery D Berger and Benjamin G Zorn . 2006. DieHard: probabilistic memory safety for unsafe languages . In Acm sigplan notices , Vol. 41 . ACM , 158\u2013168. Emery D Berger and Benjamin G Zorn. 2006. DieHard: probabilistic memory safety for unsafe languages. In Acm sigplan notices, Vol. 41. ACM, 158\u2013168."},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/1375581.1375586"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/362686.362692"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380180902"},{"key":"e_1_2_1_12_1","doi-asserted-by":"crossref","unstructured":"Chandrasekhar Boyapati Alexandru Salcianu William Beebee and Martin Rinard. 2003. Ownership types for safe regionbased memory management in real-time Java. In PLDI.  Chandrasekhar Boyapati Alexandru Salcianu William Beebee and Martin Rinard. 2003. Ownership types for safe regionbased memory management in real-time Java. In PLDI.","DOI":"10.1145\/781131.781168"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.370"},{"key":"e_1_2_1_14_1","unstructured":"Trevor Alexander Brown. 2015. Reclaiming Memory for Lock-Free Data Structures: There Has to Be a Better Way. In PODC.  Trevor Alexander Brown. 2015. Reclaiming Memory for Lock-Free Data Structures: There Has to Be a Better Way. In PODC."},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/277650.277718"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-45070-2_9"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/286936.286947"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/2754169.2754181"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814270.2814298"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/2755573.2755579"},{"key":"e_1_2_1_21_1","unstructured":"CoreCLR. 2017. CoreCLR: the .NET Core runtime. http:\/\/www.github.com\/dotnet\/CoreCLR . (2017).  CoreCLR. 2017. CoreCLR: the .NET Core runtime. http:\/\/www.github.com\/dotnet\/CoreCLR . (2017)."},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/2908080.2908106"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1109\/DSN.2006.31"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/780731.780743"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/2926697.2926699"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2694344.2694361"},{"key":"e_1_2_1_28_1","volume-title":"Steven Hand, and Michael Isard.","author":"Gog Ionel","year":"2015","unstructured":"Ionel Gog , Jana Giceva , Malte Schwarzkopf , Kapil Vaswani , Dimitrios Vytiniotis , Ganesan Ramalingam , Manuel Costa , Derek Gordon Murray , Steven Hand, and Michael Isard. 2015 . Broom : Sweeping Out Garbage Collection from Big Data Systems. In HotOS. Ionel Gog, Jana Giceva, Malte Schwarzkopf, Kapil Vaswani, Dimitrios Vytiniotis, Ganesan Ramalingam, Manuel Costa, Derek Gordon Murray, Steven Hand, and Michael Isard. 2015. Broom: Sweeping Out Garbage Collection from Big Data Systems. In HotOS."},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512563"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/362422.362476"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45414-4_21"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jpdc.2007.04.010"},{"key":"e_1_2_1_33_1","volume-title":"Berger","author":"Hertz Matthew","year":"2005","unstructured":"Matthew Hertz and Emery D . Berger . 2005 . Quantifyng the Performance of Garbage Collection vs. Explicit Memory Management. In OOPSLA. Matthew Hertz and Emery D. Berger. 2005. Quantifyng the Performance of Garbage Collection vs. Explicit Memory Management. In OOPSLA."},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/1029873.1029883"},{"key":"e_1_2_1_35_1","volume-title":"Islands: Aliasing protection in object-oriented languages. In OOPSLA.","author":"Hogg John","year":"1991","unstructured":"John Hogg . 1991 . Islands: Aliasing protection in object-oriented languages. In OOPSLA. John Hogg. 1991. Islands: Aliasing protection in object-oriented languages. In OOPSLA."},{"key":"e_1_2_1_36_1","volume-title":"Proceedings of Scala Days","author":"Hundt Robert","year":"2011","unstructured":"Robert Hundt . 2011 . Loop Recognition in C++\/Java\/Go\/Scala . In Proceedings of Scala Days 2011. Robert Hundt. 2011. Loop Recognition in C++\/Java\/Go\/Scala. In Proceedings of Scala Days 2011."},{"key":"e_1_2_1_37_1","volume-title":"The Garbage Collection Handbook: The Art of Automatic Memory Management","author":"Jones Richard","unstructured":"Richard Jones , Antony Hosking , and Eliot Moss . 2011. The Garbage Collection Handbook: The Art of Automatic Memory Management ( 1 st ed.). Chapman & amp; Hall\/CRC. Richard Jones, Antony Hosking, and Eliot Moss. 2011. The Garbage Collection Handbook: The Art of Automatic Memory Management (1st ed.). Chapman &amp; Hall\/CRC.","edition":"1"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062376"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.14722\/ndss.2015.23238"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/1346281.1346296"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/2872362.2872386"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2004.8"},{"key":"e_1_2_1_43_1","unstructured":"T. Minka J.M. Winn J.P. Guiver S. Webster Y. Zaykov B. Yangel A. Spengler and J. Bronskill. 2014. Infer.NET 2.6. (2014). Microsoft Research Cambridge. http:\/\/research.microsoft.com\/infernet.  T. Minka J.M. Winn J.P. Guiver S. Webster Y. Zaykov B. Yangel A. Spengler and J. Bronskill. 2014. Infer.NET 2.6. (2014). Microsoft Research Cambridge. http:\/\/research.microsoft.com\/infernet."},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0053062"},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/2694344.2694374"},{"key":"e_1_2_1_46_1","unstructured":"MSDN. 2016. Asynchronous Programming with async and await. https:\/\/msdn.microsoft.com\/en-us\/library\/mt674882.aspx . (2016).  MSDN. 2016. Asynchronous Programming with async and await. https:\/\/msdn.microsoft.com\/en-us\/library\/mt674882.aspx . (2016)."},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/2103656.2103722"},{"key":"e_1_2_1_48_1","doi-asserted-by":"crossref","unstructured":"Santosh Nagarakatte Jianzhou Zhao Milo M. K. Martin and Steve Zdancewic. 2010. CETS Compiler-Enforced Temporal Safety for C. In ISMM.  Santosh Nagarakatte Jianzhou Zhao Milo M. K. Martin and Steve Zdancewic. 2010. CETS Compiler-Enforced Temporal Safety for C. In ISMM.","DOI":"10.1145\/1806651.1806657"},{"key":"e_1_2_1_49_1","volume-title":"Yak: A High Performance Big-Data-Friendly Garbage Collector. In OSDI.","author":"Nguyen Khan","year":"2016","unstructured":"Khan Nguyen , Lu Fang , Guoqing Xu , Brian Demsky , Shan Lu , Sanazsadat Alamian , and Onur Mutlu . 2016 . Yak: A High Performance Big-Data-Friendly Garbage Collector. In OSDI. Khan Nguyen, Lu Fang, Guoqing Xu, Brian Demsky, Shan Lu, Sanazsadat Alamian, and Onur Mutlu. 2016. Yak: A High Performance Big-Data-Friendly Garbage Collector. In OSDI."},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/2694344.2694345"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/1866307.1866371"},{"key":"e_1_2_1_52_1","unstructured":"Matthew Parkinson Dimitrios Vytiniotis Kapil Vaswani Manuel Costa Pantazis Deligiannis Dylan McDermott Aaron Blankstein and Jonathan Balkind. 2017. Project Snowflake: Safe Manual Memory Management in .NET. Technical Report MSR-TR-2017-32. Microsoft Research. https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2017\/07\/ snowflake-extended.pdf  Matthew Parkinson Dimitrios Vytiniotis Kapil Vaswani Manuel Costa Pantazis Deligiannis Dylan McDermott Aaron Blankstein and Jonathan Balkind. 2017. Project Snowflake: Safe Manual Memory Management in .NET. Technical Report MSR-TR-2017-32. Microsoft Research. https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2017\/07\/ snowflake-extended.pdf"},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-46425-5_24"},{"key":"e_1_2_1_54_1","doi-asserted-by":"publisher","DOI":"10.1145\/2754169.2754185"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/320384.320425"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2006.02.003"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1145\/1993478.1993491"},{"key":"e_1_2_1_58_1","doi-asserted-by":"publisher","DOI":"10.1006\/inco.1996.2613"},{"key":"e_1_2_1_59_1","unstructured":"TPC.org. 2017. The TPC Benchmark T M H. http:\/\/www.tpc.org\/tpch . (2017).  TPC.org. 2017. The TPC Benchmark T M H. http:\/\/www.tpc.org\/tpch . (2017)."},{"key":"e_1_2_1_60_1","unstructured":"Philip Wadler. 1990. Linear types can change the world!. In IFIP TC 2 Working Conference.  Philip Wadler. 1990. Linear types can change the world!. In IFIP TC 2 Working Conference."},{"key":"e_1_2_1_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/363911.363923"},{"key":"e_1_2_1_62_1","unstructured":"David Walker and Kevin Watkins. 2001. On regions and linear types. In ICFP.  David Walker and Kevin Watkins. 2001. On regions and linear types. In ICFP."},{"key":"e_1_2_1_63_1","doi-asserted-by":"publisher","DOI":"10.14722\/ndss.2015.23190"},{"key":"e_1_2_1_64_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380230704"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3141879","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3141879","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T03:37:14Z","timestamp":1750217834000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3141879"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2017,10,12]]},"references-count":63,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2017,10,12]]}},"alternative-id":["10.1145\/3141879"],"URL":"https:\/\/doi.org\/10.1145\/3141879","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2017,10,12]]},"assertion":[{"value":"2017-10-12","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}