Demystifying the Java Heap