This document outlines techniques for analyzing common memory-related problems in Java applications using heap dumps and the Memory Analyzer tool. It discusses how to analyze memory leaks by finding the largest objects and determining what keeps them in memory. Heavy requests are analyzed by inspecting thread attributes and stack traces. Reducing memory footprint involves finding inefficient data structures and redundant data. Non-heap memory issues can be caused by too many interned strings or class loaders that are not released properly. The presentation demonstrates these analysis methods on real heap dumps and emphasizes that heap dumps and Memory Analyzer can automate much of the memory investigation process.