Analysis and Reduction of Memory Inefficiencies in Java Strings Kiyokuni Kawachiya Kazunori Ogata Tamiya Onodera IBM Research, Tokyo Research Laboratory 1623-14, Shimotsuruma, Yamato, Kanagawa 242-8502, Japan <
[email protected]> Abstract Categories and Subject Descriptors D.3.3 [Programming This paper describes a novel approach to reduce the mem- Languages]: Language Constructs and Features—frameworks ory consumption of Java programs, by focusing on their General Terms Languages, Design, Performance, Experi- string memory inefficiencies. In recent Java applications, mentation string data occupies a large amount of the heap area. For example, about 40% of the live heap area is used for string Keywords Java, string, memory management, garbage col- data when a production J2EE application server is running. lection, footprint analysis and reduction By investigating the string data in the live heap, we iden- tified two types of memory inefficiencies — duplication and 1. Introduction unused literals. In the heap, there are many string objects Virtually all programming languages provide support for that have the same values. There also exist many string lit- strings together with a rich set of string operations. In erals whose values are not actually used by the applica- Java [10], the standard class library includes three classes, tion. Since these inefficiencies exist as live objects, they can- String for immutable strings, and StringBuffer and not be eliminated by existing garbage collection techniques, StringBuilder for mutable strings. Although the devel- which only remove dead objects. Quantitative analysis of oper of a Java virtual machine (JVM) attempts to imple- Java heaps in real applications revealed that more than 50% ment these classes as efficiently as possible, there is little of the string data in the live heap is wasted by these ineffi- description in the literature on how efficient or inefficient ciencies.