实例变量引用存在堆中
局部变量引用存在栈中
对于 Object obj=new Object()
,此时的obj引用,在HotSpot中,存储的是对象地址。
• Instance variables and objects live on the heap.
• Local variables live on the stack.
java内存结构(并不仅仅是堆和栈)
程序计数器(Program Counter Register),占用的内存很小。类似一个字节码文件的行号指示器。线程私有。
Java虚拟机栈(Java Virtual Machine Stacks) 存储局部变量表、动态链接等信息。线程私有。
本地方法栈(Native Method Stacks)主要为Native方法服务。HotSpot中把该部分和java虚拟机栈合二为一。
Java堆(Java Heap) 存放对象实例和数组等。不是所有的对象一定分配在堆中!
方法区(Method Area) 存储类信息、静态变量和常量等。该本分包含运行时常量池(Runtime Constant Pool)。
GC不仅仅会对Heap操作,也有可能对Method Area操作。
http://five.iteye.com/blog/1727846