堆: 堆主要存放 Java 在运行过程中 new 出来的对象, 凡是通过 new 生成的对象都存放在堆中, 对于堆中的对象生命周期的管理由 Java 虚拟机的垃圾回收机制 GC 进行回收和统一管理.
栈: 栈主要存放在运行期间用到的一些局部变量 (基本数据类型的变量) 或者是指向其他对象的一些引用, 当一段代码或者一个方法调用完毕后, 栈中为这段代码所提供的基本数据类型或者对象的引用立即被释放; 另外需注意的是栈中存放变量的值是可以共享的, 优先在栈中寻找是否有相同变量的值, 如果有直接指向这个值, 如果没有则另外分配.
常量池: 常量池在编译期间就将一部分数据存放于该区域, 包含基本数据类型如 int,long 等和对象类型 String, 数组等并以 final 声明的常量值. 特别注意的是对于运行期位于栈中的 String 常量的值可以通过 String.intern() 方法将该值置入到常量池中.
静态域: 存放类中以 static 声明的静态成员变量
方法区: 主要存放一些代码段以供类调用的时候所共用.
来源: http://blog.csdn.net/ago_lei/article/details/79213910