{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T21:03:41Z","timestamp":1760043821457,"version":"3.41.0"},"reference-count":35,"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\/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>Just-in-time (JIT) compilation coupled with code caching are widely used to improve performance in dynamic programming language implementations. These code caches, along with the associated profiling data for the hot code, however, consume significant amounts of memory. Furthermore, they incur extra JIT compilation time for their creation. On Android, the current standard JIT compiler and its code caches are not shared among processes\u2014that is, the runtime system maintains a private code cache, and its associated data, for each runtime process. However, applications running on the same platform tend to share multiple libraries in common. Sharing cached code across multiple applications and multiple processes can lead to a reduction in memory use. It can directly reduce compile time. It can also reduce the cumulative amount of time spent interpreting code. All three of these effects can improve actual runtime performance.<\/jats:p>\n          <jats:p>In this paper, we describe ShareJIT, a global code cache for JITs that can share code across multiple applications and multiple processes. We implemented ShareJIT in the context of the Android Runtime (ART), a widely used, state-of-the-art system. To increase sharing, our implementation constrains the amount of context that the JIT compiler can use to optimize the code. This exposes a fundamental tradeoff: increased specialization to a single process\u2019 context decreases the extent to which the compiled code can be shared. In ShareJIT, we limit some optimization to increase shareability. To evaluate the ShareJIT, we tested 8 popular Android apps in a total of 30 experiments. ShareJIT improved overall performance by 9% on average, while decreasing memory consumption by 16% on average and JIT compilation time by 37% on average.<\/jats:p>","DOI":"10.1145\/3276494","type":"journal-article","created":{"date-parts":[[2018,10,24]],"date-time":"2018-10-24T11:57:18Z","timestamp":1540382238000},"page":"1-23","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":12,"title":["ShareJIT: JIT code cache sharing across processes and its practical implementation"],"prefix":"10.1145","volume":"2","author":[{"given":"Xiaoran","family":"Xu","sequence":"first","affiliation":[{"name":"Rice University, USA"}]},{"given":"Keith","family":"Cooper","sequence":"additional","affiliation":[{"name":"Rice University, USA"}]},{"given":"Jacob","family":"Brock","sequence":"additional","affiliation":[{"name":"University of Rochester, USA"}]},{"given":"Yan","family":"Zhang","sequence":"additional","affiliation":[{"name":"Futurewei Technologies, USA"}]},{"given":"Handong","family":"Ye","sequence":"additional","affiliation":[{"name":"Futurewei Technologies, USA"}]}],"member":"320","published-online":{"date-parts":[[2018,10,24]]},"reference":[{"doi-asserted-by":"publisher","key":"e_1_2_2_1_1","DOI":"10.5555\/1251229.1251252"},{"key":"e_1_2_2_2_1","first-page":"738","article-title":"Class sharing between multiple virtual machines. (May 18 2004)","volume":"6","author":"Berry Robert F","year":"2004","journal-title":"US Patent"},{"doi-asserted-by":"publisher","key":"e_1_2_2_3_1","DOI":"10.1109\/PACRIM.2017.8121911"},{"doi-asserted-by":"publisher","key":"e_1_2_2_4_1","DOI":"10.1145\/3178372.3179523"},{"doi-asserted-by":"publisher","key":"e_1_2_2_5_1","DOI":"10.1145\/1346256.1346265"},{"doi-asserted-by":"publisher","key":"e_1_2_2_6_1","DOI":"10.1145\/2442776.2442785"},{"doi-asserted-by":"publisher","key":"e_1_2_2_7_1","DOI":"10.5555\/646159.758681"},{"volume-title":"USENIX Annual Technical Conference, General Track. 85\u201398","year":"2003","author":"Czajkowski Grzegorz","key":"e_1_2_2_8_1"},{"doi-asserted-by":"publisher","key":"e_1_2_2_9_1","DOI":"10.1007\/11531142_5"},{"doi-asserted-by":"publisher","key":"e_1_2_2_10_1","DOI":"10.1145\/800017.800542"},{"doi-asserted-by":"publisher","key":"e_1_2_2_11_1","DOI":"10.1147\/sj.391.0194"},{"unstructured":"David Ehringer. 2010. The dalvik virtual machine architecture. (2010).  David Ehringer. 2010. The dalvik virtual machine architecture. (2010).","key":"e_1_2_2_12_1"},{"unstructured":"Google. 2018a. Android \u2013 Android Oreo (Go edition). (2018). https:\/\/www.android.com\/versions\/oreo- 8- 0\/go- edition\/  Google. 2018a. Android \u2013 Android Oreo (Go edition). (2018). https:\/\/www.android.com\/versions\/oreo- 8- 0\/go- edition\/","key":"e_1_2_2_13_1"},{"unstructured":"Google. 2018b. Dex Bytecode | Android Open Source Project. (2018). https:\/\/source.android.com\/devices\/tech\/dalvik\/ dalvik- bytecode  Google. 2018b. Dex Bytecode | Android Open Source Project. (2018). https:\/\/source.android.com\/devices\/tech\/dalvik\/ dalvik- bytecode","key":"e_1_2_2_14_1"},{"unstructured":"Google. 2018c. Dex File Format | Android Open Source Project. (2018). https:\/\/source.android.com\/devices\/tech\/dalvik\/ dex- format  Google. 2018c. Dex File Format | Android Open Source Project. (2018). https:\/\/source.android.com\/devices\/tech\/dalvik\/ dex- format","key":"e_1_2_2_15_1"},{"unstructured":"Google. 2018d. Enable Multidex for Apps with Over 64K Methods | Android Studio. (2018). https:\/\/developer.android.com\/ studio\/build\/multidex.html  Google. 2018d. Enable Multidex for Apps with Over 64K Methods | Android Studio. (2018). https:\/\/developer.android.com\/ studio\/build\/multidex.html","key":"e_1_2_2_16_1"},{"unstructured":"Google. 2018e. Logcat | Android Studio. (2018). developer.android.com\/studio\/command- line\/logcat.html  Google. 2018e. Logcat | Android Studio. (2018). developer.android.com\/studio\/command- line\/logcat.html","key":"e_1_2_2_17_1"},{"unstructured":"Google. 2018f. Low RAM Configuration | Android Open Source Project. (2018). https:\/\/source.android.com\/devices\/tech\/ perf\/low- ram#lowmem  Google. 2018f. Low RAM Configuration | Android Open Source Project. (2018). https:\/\/source.android.com\/devices\/tech\/ perf\/low- ram#lowmem","key":"e_1_2_2_18_1"},{"volume-title":"Workshop on AMAS-BT.","year":"2013","author":"Guckert Lauren","key":"e_1_2_2_19_1"},{"doi-asserted-by":"publisher","key":"e_1_2_2_20_1","DOI":"10.5555\/646149.679193"},{"doi-asserted-by":"publisher","key":"e_1_2_2_21_1","DOI":"10.1109\/COMPSYM.2010.5685462"},{"unstructured":"IBM. 2018. Java Class data sharing between JVMs. (2018). https:\/\/www.ibm.com\/support\/knowledgecenter\/en\/SSYKE2_7.1. 0\/com.ibm.java.lnx.71.doc\/user\/classdatasharing.html  IBM. 2018. Java Class data sharing between JVMs. (2018). https:\/\/www.ibm.com\/support\/knowledgecenter\/en\/SSYKE2_7.1. 0\/com.ibm.java.lnx.71.doc\/user\/classdatasharing.html","key":"e_1_2_2_22_1"},{"doi-asserted-by":"publisher","key":"e_1_2_2_23_1","DOI":"10.5555\/2190025.2190071"},{"doi-asserted-by":"publisher","key":"e_1_2_2_24_1","DOI":"10.1145\/1254810.1254812"},{"doi-asserted-by":"publisher","key":"e_1_2_2_25_1","DOI":"10.1145\/1369396.1370017"},{"key":"e_1_2_2_26_1","first-page":"614","article-title":"Sharing classes and class loaders. (Nov. 3 2009)","volume":"7","author":"Kuck Norbert","year":"2009","journal-title":"US Patent"},{"key":"e_1_2_2_27_1","first-page":"882","article-title":"Shared JAVA jar files. (Feb. 1 2011)","volume":"7","author":"Landau Erez","year":"2011","journal-title":"US Patent"},{"unstructured":"Oracle. 2018. Java Class data sharing. (2018). https:\/\/docs.oracle.com\/javase\/10\/vm\/class- data- sharing.htm  Oracle. 2018. Java Class data sharing. (2018). https:\/\/docs.oracle.com\/javase\/10\/vm\/class- data- sharing.htm","key":"e_1_2_2_28_1"},{"key":"e_1_2_2_29_1","volume-title":"Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium -","volume":"1","author":"Paleczny Michael","year":"2001"},{"key":"e_1_2_2_30_1","first-page":"415","article-title":"Sharing objects in runtime systems. (Aug. 19 2008)","volume":"7","author":"Schmidt Oliver","year":"2008","journal-title":"US Patent"},{"doi-asserted-by":"publisher","key":"e_1_2_2_31_1","DOI":"10.1147\/sj.391.0175"},{"unstructured":"TeamAA. 2018. What is Android Go? (2018). https:\/\/www.androidauthority.com\/android- go- 773037\/  TeamAA. 2018. What is Android Go? (2018). https:\/\/www.androidauthority.com\/android- go- 773037\/","key":"e_1_2_2_32_1"},{"key":"e_1_2_2_33_1","first-page":"418","article-title":"Centralized cache storage for runtime systems. (Aug. 26 2008)","volume":"7","author":"Wintergerst Michael","year":"2008","journal-title":"US Patent"},{"doi-asserted-by":"publisher","key":"e_1_2_2_34_1","DOI":"10.5555\/838237.838454"},{"doi-asserted-by":"publisher","key":"e_1_2_2_35_1","DOI":"10.1145\/2873587.2873596"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3276494","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3276494","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T01:01:59Z","timestamp":1750208519000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3276494"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2018,10,24]]},"references-count":35,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2018,10,24]]}},"alternative-id":["10.1145\/3276494"],"URL":"https:\/\/doi.org\/10.1145\/3276494","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"}}]}}