{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,9,28]],"date-time":"2025-09-28T04:11:05Z","timestamp":1759032665337,"version":"3.41.0"},"reference-count":48,"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\/4.0\/"}],"funder":[{"name":"European Social Fund - Reach High","award":["254\/15\/10"],"award-info":[{"award-number":["254\/15\/10"]}]},{"DOI":"10.13039\/501100000781","name":"European Research Council","doi-asserted-by":"publisher","award":["307334"],"award-info":[{"award-number":["307334"]}],"id":[{"id":"10.13039\/501100000781","id-type":"DOI","asserted-by":"publisher"}]}],"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>Static analyses aspire to explore all possible executions in order to achieve soundness. Yet, in practice, they fail to capture common dynamic behavior. Enhancing static analyses with dynamic information is a common pattern, with tools such as Tamiflex. Past approaches, however, miss significant portions of dynamic behavior, due to native code, unsupported features (e.g., invokedynamic or lambdas in Java), and more. We present techniques that substantially counteract the unsoundness of a static analysis, with virtually no intrusion to the analysis logic. Our approach is reified in the HeapDL toolchain and consists in taking whole-heap snapshots during program execution, that are further enriched to capture significant aspects of dynamic behavior, regardless of the causes of such behavior. The snapshots are then used as extra inputs to the static analysis. The approach exhibits both portability and significantly increased coverage. Heap information under one set of dynamic inputs allows a static analysis to cover many more behaviors under other inputs. A HeapDL-enhanced static analysis of the DaCapo benchmarks computes 99.5% (median) of the call-graph edges of unseen dynamic executions (vs. 76.9% for the Tamiflex tool).<\/jats:p>","DOI":"10.1145\/3133892","type":"journal-article","created":{"date-parts":[[2017,10,13]],"date-time":"2017-10-13T15:15:45Z","timestamp":1507907745000},"page":"1-27","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":19,"title":["Heaps don't lie: countering unsoundness with heap snapshots"],"prefix":"10.1145","volume":"1","author":[{"given":"Neville","family":"Grech","sequence":"first","affiliation":[{"name":"University of Athens, Greece \/ University of Malta, Malta"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"George","family":"Fourtounis","sequence":"additional","affiliation":[{"name":"University of Athens, Greece"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Adrian","family":"Francalanza","sequence":"additional","affiliation":[{"name":"University of Malta, Malta"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Yannis","family":"Smaragdakis","sequence":"additional","affiliation":[{"name":"University of Athens, Greece"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2017,10,12]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/1879211.1879222"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/1297081.1297091"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2723372.2742796"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/2594291.2594299"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/1167473.1167488"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/2771284.2771288"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/1985793.1985827"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/1640089.1640108"},{"key":"e_1_2_1_9_1","volume-title":"ASM: a code manipulation tool to implement adaptable systems. Adaptable and extensible component systems 30, 19","author":"Bruneton Eric","year":"2002","unstructured":"Eric Bruneton , Romain Lenglet , and Thierry Coupaye . 2002. ASM: a code manipulation tool to implement adaptable systems. Adaptable and extensible component systems 30, 19 ( 2002 ). Eric Bruneton, Romain Lenglet, and Thierry Coupaye. 2002. ASM: a code manipulation tool to implement adaptable systems. Adaptable and extensible component systems 30, 19 (2002)."},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-24712-5_8"},{"key":"e_1_2_1_11_1","unstructured":"Stephen J. Fink. 2015. T.J. Watson Libraries for Analysis (WALA). http:\/\/wala.sourceforge.net . (2015).  Stephen J. Fink. 2015. T.J. Watson Libraries for Analysis (WALA). http:\/\/wala.sourceforge.net . (2015)."},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/1640089.1640110"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/1065010.1065036"},{"key":"e_1_2_1_14_1","unstructured":"Brian Goetz. 2010. One VM Many Languages. https:\/\/gotocon.com\/dl\/jaoo- aarhus- 2010\/slides\/BrianGoetz_ OneVMManyLanguages.pdf . (2010).  Brian Goetz. 2010. One VM Many Languages. https:\/\/gotocon.com\/dl\/jaoo- aarhus- 2010\/slides\/BrianGoetz_ OneVMManyLanguages.pdf . (2010)."},{"key":"e_1_2_1_15_1","unstructured":"Brian Goetz. 2016. Project Valhalla Update. http:\/\/www.oracle.com\/technetwork\/java\/jvmls2016- goetz- 3126134.pdf . (August 2016). JVM Language Summit.  Brian Goetz. 2016. Project Valhalla Update. http:\/\/www.oracle.com\/technetwork\/java\/jvmls2016- goetz- 3126134.pdf . (August 2016). JVM Language Summit."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-39718-9_12"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/3133926"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/1216374.1216379"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-24851-4_5"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/2823363.2823367"},{"key":"e_1_2_1_21_1","unstructured":"IBM. 2017. Using the HPROF Profiler. https:\/\/www.ibm.com\/support\/knowledgecenter\/en\/SSYKE2_8.0.0\/com.ibm.java.lnx. 80.doc\/diag\/tools\/hprof.html . (2017).  IBM. 2017. Using the HPROF Profiler. https:\/\/www.ibm.com\/support\/knowledgecenter\/en\/SSYKE2_8.0.0\/com.ibm.java.lnx. 80.doc\/diag\/tools\/hprof.html . (2017)."},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-41540-6_23"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462191"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE.2017.53"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/2970276.2970368"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/3033019.3033029"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-48288-9_10"},{"key":"e_1_2_1_28_1","volume-title":"Java SE 8 Edition.","author":"Lindholm Tim","year":"2014","unstructured":"Tim Lindholm , Frank Yellin , Gilad Bracha , and Alex Buckley . 2014. The Java Virtual Machine Specification , Java SE 8 Edition. ( 2014 ). Tim Lindholm, Frank Yellin, Gilad Bracha, and Alex Buckley. 2014. The Java Virtual Machine Specification, Java SE 8 Edition. (2014)."},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/2644805"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/1835804.1835822"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1007\/11537328_20"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/1044834.1044835"},{"key":"e_1_2_1_33_1","unstructured":"Oracle. 2014a. Java Platform Standard Edition Java Flight Recorder Runtime Guide. https:\/\/docs.oracle.com\/javacomponents\/ jmc- 5- 4\/jfr- runtime- guide\/about.htm . (2014).  Oracle. 2014a. Java Platform Standard Edition Java Flight Recorder Runtime Guide. https:\/\/docs.oracle.com\/javacomponents\/ jmc- 5- 4\/jfr- runtime- guide\/about.htm . (2014)."},{"key":"e_1_2_1_34_1","unstructured":"Oracle. 2014b. JSR 335: Lambda Expressions for the Java\u2122 Programming Language. (2014). https:\/\/jcp.org\/en\/jsr\/detail?id=335  Oracle. 2014b. JSR 335: Lambda Expressions for the Java\u2122 Programming Language. (2014). https:\/\/jcp.org\/en\/jsr\/detail?id=335"},{"volume-title":"HPROF: A Heap\/CP U Profiling Tool","year":"2016","key":"e_1_2_1_35_1","unstructured":"Oracle. 2016 a. HPROF: A Heap\/CP U Profiling Tool . http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/samples\/hprof.html . (2016). Oracle. 2016a. HPROF: A Heap\/CP U Profiling Tool. http:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/samples\/hprof.html . (2016)."},{"key":"e_1_2_1_36_1","unstructured":"Oracle. 2016b. jhat. (2016). https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/unix\/jhat.html  Oracle. 2016b. jhat. (2016). https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/unix\/jhat.html"},{"key":"e_1_2_1_37_1","unstructured":"Oracle. 2016c. VisualVM: Home. https:\/\/visualvm.github.io\/ . (2016).  Oracle. 2016c. VisualVM: Home. https:\/\/visualvm.github.io\/ . (2016)."},{"key":"e_1_2_1_38_1","unstructured":"Oracle. 2017. JEP 280: Indify String Concatenation. (2017). http:\/\/openjdk.java.net\/jeps\/280  Oracle. 2017. JEP 280: Indify String Concatenation. (2017). http:\/\/openjdk.java.net\/jeps\/280"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1002\/cpe.v16:7"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1109\/VISSOF.2009.5336418"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/1711506.1711508"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/1081706.1081750"},{"volume-title":"Program flow analysis: theory and applications, Steven S","author":"Sharir Micha","key":"e_1_2_1_43_1","unstructured":"Micha Sharir and Amir Pnueli . 1981. Two Approaches to Interprocedural Data Flow Analysis . In Program flow analysis: theory and applications, Steven S . Muchnick and Neil D. Jones (Eds.). Prentice-Hall, Inc. , Englewood Cliffs, NJ , Chapter 7, 189\u2013233. Micha Sharir and Amir Pnueli. 1981. Two Approaches to Interprocedural Data Flow Analysis. In Program flow analysis: theory and applications, Steven S. Muchnick and Neil D. Jones (Eds.). Prentice-Hall, Inc., Englewood Cliffs, NJ, Chapter 7, 189\u2013233."},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/1926385.1926390"},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.5555\/781995.782008"},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-11692-1_14"},{"key":"e_1_2_1_47_1","unstructured":"YourKit. 2017. https:\/\/www.yourkit.com\/ . (2017).  YourKit. 2017. https:\/\/www.yourkit.com\/ . (2017)."},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/2699026.2699105"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3133892","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3133892","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T02:13:25Z","timestamp":1750212805000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3133892"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2017,10,12]]},"references-count":48,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2017,10,12]]}},"alternative-id":["10.1145\/3133892"],"URL":"https:\/\/doi.org\/10.1145\/3133892","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"}}]}}