Performance analysis and optimization of the Java memory system
Lebsack, Carl (2008) Performance analysis and optimization of the Java memory system. PhD thesis, Iowa State University.
Full text available as:
Java is one of the most dominant languages used in development today. It can be found in desktop, server, embedded and portable computer systems. The language has many desirable characteristics that have made it popular including object-oriented design, automatic dynamic memory management (garbage collection), platform independence, security and a rich library of components available for rapidly constructing complex software. Product developers are drawn to the robustness afforded by the various language features and appreciate a quick time-to-market achieved with a lower incidence of software defects than previous language systems. The popularity of the language provides motivation for evaluating its performance. Research that improves the runtime system that supports Java can impact performance of the large number of applications that rely on that system. In this thesis I focus on the runtime performance of Java applications with respect to the memory system. Specifically I analyze the behavior of the applications in terms of their dynamic memory allocation and access patterns. Additionally, I analyze properties of the whole system performance including runtime and cache misses. Experiments are conducted under various simulation environments as well as on real hardware. Important findings in this work include the propensity for Java applications to expend a significant majority of their memory accesses to recently allocated objects. I demonstrate how an architecture where scratchpad is introduced can reduce memory traffic by preventing short-lived objects from occupying main memory. I extend the work to include an investigation of software prefetching and biased cache replacement for object allocation and show when the techniques offer performance improvements. Finally, I show that many Java applications, although they aggressively allocate large numbers of objects, are not substantially affected by the memory system including the size of heap and the size of second level cache. I also demonstrate that many Java applications are already achieving runtimes near that expected when no cache misses occur.
Archive Staff Only: edit this record