Efficient Memory Traces with Full Pointer Information

Tracing objects and their references is paramount for tracking down memory-related performance problems. In this paper, we present a novel approach for recording references between objects at minimal run-time overhead. Extending our memory monitoring tool AntTracks with pointer information allows for a complete reconstruction of the heap before and after garbage collections as well as for an offline analysis of all garbage collection decisions made. Additionally, we describe several trace optimization techniques, such as exploiting VM-internal information, to reduce the tracing overhead even further. We evaluate our approach by means of the DaCapo benchmark suite and a selection of memory-intensive benchmarks from the DaCapoScala benchmark suite and the SPECjvm benchmark suite.

[1]  Kathryn S. McKinley,et al.  Dynamic shape analysis via degree metrics , 2009, ISMM '09.

[2]  Hanspeter Mössenböck,et al.  Efficient Rebuilding of Large Java Heaps from Event Traces , 2015, PPPJ.

[3]  David Ungar Generation scavenging: a nondisruptive high performance storage reclamation algorithm , 1984 .

[4]  Krishna M. Kavi,et al.  International Conference on Computational Science, ICCS 2011 Gleipnir: A Memory Analysis Tool , 2011, ICCS.

[5]  Hanspeter Mössenböck,et al.  Accurate and Efficient Object Tracing for Java Applications , 2015, ICPE.

[6]  Kathryn S. McKinley,et al.  Generating object lifetime traces with Merlin , 2006, TOPL.

[7]  Barbara G. Ryder,et al.  Points-to analysis for Java using annotated constraints , 2001, OOPSLA '01.

[8]  Kathryn S. McKinley,et al.  Error-free garbage collection traces: how to cheat and not get caught , 2002, SIGMETRICS '02.

[9]  Ben Hardekopf,et al.  The ant and the grasshopper: fast and accurate pointer analysis for millions of lines of code , 2007, PLDI '07.

[10]  Richard E. Jones,et al.  GCspy: an adaptable heap visualisation framework , 2002, OOPSLA '02.

[11]  Manu Sridharan,et al.  Demand-driven points-to analysis for Java , 2005, OOPSLA '05.

[12]  Philipp Lengauer,et al.  Building Custom, Efficient, and Accurate Memory Monitoring Tools for Java Applications , 2016, ICPE.

[13]  Henry Lieberman,et al.  A real-time garbage collector based on the lifetimes of objects , 1983, CACM.

[14]  Michael Hind,et al.  Pointer analysis: haven't we solved this problem yet? , 2001, PASTE '01.

[15]  Keshav Pingali,et al.  Parallel inclusion-based points-to analysis , 2010, OOPSLA.

[16]  Eran Yahav,et al.  QVM: an efficient runtime for detecting defects in deployed systems , 2008, OOPSLA '08.

[17]  Jens Dietrich,et al.  Giga-scale exhaustive points-to analysis for Java in under a minute , 2015, OOPSLA.

[18]  Krishna M. Kavi,et al.  Gleipnir: a memory profiling and tracing tool , 2013, CARN.

[19]  Samuel Z. Guyer,et al.  Elephant tracks: portable production of complete and precise gc traces , 2013, ISMM '13.

[20]  Amer Diwan,et al.  The DaCapo benchmarks: java benchmarking development and analysis , 2006, OOPSLA '06.

[21]  Kathryn S. McKinley,et al.  Cork: dynamic memory leak detection for garbage-collected languages , 2007, POPL '07.

[22]  Mira Mezini,et al.  Da capo con scala: design and analysis of a scala benchmark suite for the java virtual machine , 2011, OOPSLA '11.