Jvm内存模型

70 阅读1分钟

内存分布

  • 堆:它是线程共享的,内部存储着new对象后的对象信息等
  • 方法区:内部包含着类信息、静态方法、静态变量、常量等信息
  • 栈:它是线程私有的,内部存储着局部变量等信息(局部变量是对象的话存储的就是堆中的内存地址)
  • 程序计数器:就是记录程序执行到了哪一行
  • 本地方法栈:存放着一些C语言编写底层方法和用native关键字修饰的本地方法

image.png

问题:当new一个对象的时候,这个对象为局部变量它会存在于什么位置?

回答:其实栈和堆是相互配合的,new一个对象的时候会先到方法区中拿到这个类的信息,并且在堆中开辟一块区域用于存放new对象的对象信息。再将局部变量写入到栈中,这个局部变量存储的是堆中这个对象的内存地址。