Presenter: Gary Sevitsky (IBM)
It is easy these days to build Java applications with large memory requirements - in fact it takes significant effort not to. It is common to see multi-gigabyte heaps with tens of millions of objects, where as much as 80% of memory is the overhead of the data representation. Bloated designs have a serious on impact on scalability, power consumption, performance, and deployment schedules. Pervasive memory problems are the result of many factors, including a pile-up of framework abstractions that programmers must integrate, and limitations of the Java language and runtime. The magnitude of problems can be surprising. At the same time, it suggests there is much room for improvement.
This tutorial aims to raise awareness, for researchers and developers, of the typical practices leading to memory consumption in Java - from basic Java building blocks through high-level framework and application code. We present a systematic catalog of costly patterns gathered from real-world case studies. Patterns are organized around common design problems such as modeling data types, representing relationships, and managing object lifetime. For developers the goal is to enable informed tradeoffs, and to show how dramatic improvements are sometimes possible without sacrificing sound design. For researchers interested in improving the state of memory usage through new analyses, optimizations, tools, or language features, the tutorial provides an understanding of developer practices and the limits they face, as well as discussion of opportunities for solutions.