A dynamic analysis to support object-sharing code refactorings

Creation of large numbers of co-existing long-lived isomorphic objects increases the memory footprint of applications significantly. In this paper we propose a dynamic-analysis based approach that detects allocation sites that create large numbers of long-lived isomorphic objects, estimates quantitatively the memory savings to be obtained by sharing isomorphic objects created at these sites, and also checks whether certain necessary conditions for safely employing object sharing hold. We have implemented our approach as a tool, and have conducted experiments on several real-life Java benchmarks. The results from our experiments indicate that in real benchmarks a significant amount of heap memory, ranging up to 37% in some benchmarks, can be saved by employing object sharing. We have also validated the precision of estimates from our tool by comparing these with actual savings obtained upon introducing object-sharing at selected sites in the real benchmarks.

[1]  Darko Marinov,et al.  Object equality profiling , 2003, OOPSLA.

[2]  Narayanan Vijaykrishnan,et al.  Heap compression for memory-constrained Java environments , 2003, OOPSLA 2003.

[3]  Kathryn S. McKinley,et al.  No bit left behind: the limits of heap data compression , 2008, ISMM '08.

[4]  Matthew Arnold,et al.  Jolt: lightweight dynamic analysis and removal of object churn , 2008, OOPSLA.

[5]  Martin C. Rinard,et al.  Data size optimizations for java programs , 2003, LCTES.

[6]  Atanas Rountev,et al.  Detecting inefficiently-used containers to avoid bloat , 2010, PLDI '10.

[7]  Nick Mitchell,et al.  The causes of bloat, the limits of health , 2007, OOPSLA.

[8]  Guoqing Xu,et al.  Finding reusable data structures , 2012, OOPSLA '12.

[9]  Manish Gupta,et al.  Reuse, Recycle to De-bloat Software , 2011, ECOOP.

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

[11]  Guoqing Xu,et al.  Cachetor: detecting cacheable data to remove bloat , 2013, ESEC/FSE 2013.

[12]  Dave Jones This is a test document , 2015 .

[13]  Matthew Arnold,et al.  Software bloat analysis: finding, removing, and preventing performance problems in modern large-scale object-oriented applications , 2010, FoSER '10.

[14]  Alejandro Infante Identifying caching opportunities, effortlessly , 2014, ICSE Companion.

[15]  Barbara G. Ryder,et al.  A scalable technique for characterizing the usage of temporaries in framework-intensive Java applications , 2008, SIGSOFT '08/FSE-16.

[16]  Edith Schonberg,et al.  Patterns of Memory Inefficiency , 2011, ECOOP.

[17]  Kiyokuni Kawachiya,et al.  Analysis and reduction of memory inefficiencies in Java strings , 2008, OOPSLA.

[18]  Edith Schonberg,et al.  Finding low-utility data structures , 2010, PLDI '10.

[19]  Andrew W. Appel,et al.  Hash-consing Garbage Collection , 1993 .

[20]  Matthew Arnold,et al.  Go with the flow: profiling copies to find runtime bloat , 2009, PLDI '09.

[21]  Atanas Rountev,et al.  Uncovering performance problems in Java applications with reference propagation profiling , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[22]  Atanas Rountev,et al.  Precise memory leak detection for java software using container profiling , 2013, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[23]  Mahmut T. Kandemir,et al.  Exploiting frequent field values in java objects for reducing heap memory requirements , 2005, VEE '05.