对于大多数的程序员来说,Java内存比较流行的说法便是堆和栈,这其实是非常粗略的一种划分,这种划分的”堆”对应内存模型的Java堆,”栈”是指虚拟机栈
运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含Java堆、方法区,在方法区内有一个常量池。
程序计数器:每个线程都有自己计数器,是私有内存空间
虚拟机栈:Java方法执行的内存模型
本地方法栈:native 方法执行的内存。
堆: Java虚拟机管理的最大的一块内存,也是GC的主战场,里面存放的是几乎所有的对象实例和数组数据, Java堆被分为新生代和老年代;
方法区:方法区主要存放的是已被虚拟机加载的类信息、常量、静态变量,
运行时常量池:运行时常量池也是方法区的一部分,用于存放编译器生成的各种字面量和符号引用
内存分配:
new 类 分配在堆上, 引用在虚拟机栈,变量分配在虚拟机栈上。
这篇文章说的更清楚:
http://www.jianshu.com/p/24c074138efa