内存分布
- 堆:它是线程共享的,内部存储着new对象后的对象信息等
- 方法区:内部包含着类信息、静态方法、静态变量、常量等信息
- 栈:它是线程私有的,内部存储着局部变量等信息(局部变量是对象的话存储的就是堆中的内存地址)
- 程序计数器:就是记录程序执行到了哪一行
- 本地方法栈:存放着一些C语言编写底层方法和用native关键字修饰的本地方法
问题:当new一个对象的时候,这个对象为局部变量它会存在于什么位置?
回答:其实栈和堆是相互配合的,new一个对象的时候会先到方法区中拿到这个类的信息,并且在堆中开辟一块区域用于存放new对象的对象信息。再将局部变量写入到栈中,这个局部变量存储的是堆中这个对象的内存地址。