例如 Person p1 = new Person(); 则p1存放在栈中,new Person()存放在堆中。P1的值是new Person的内存地址,也可看成是它的一个引用。
堆(Heap)
此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。 这一点在java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
栈(Stack)
指的是虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean,byte,char,short,int,float,long,double) 对象引用(reference类型,他不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。
方法区
用于存储已经被虚拟机加载的类信息常量,静态变量,即时编译器编译后的代码等数据。