JVM内存模型
栈
栈分虚拟机栈和本地方法栈
栈用来存储Java的基本数据类型. Java指令代码(包括方法). 常量 Stack的内存管理是顺序分配的,而且定长,不存在内存回收的问题
堆
堆用来存储Java对象实例 实际上也是保存对象实例的属性值,属性的类型和对象本身的类型标记等Heap 则是随机分配内存,不定长度,存在内存分配和回收的问题
注意:对象实例在Heap 中分配好以后,需要在Stack中保存一个4字节的Heap 内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例
方法区
所有**线程共享**的内存区域
存储已被虚拟机加载的类信息.常量.静态变量,运行时的常量池也存于方法区中
程序计数器
当前线程所执行的字节码的行号指示器
执行的是java方法时,计数器记录的是正在执行的虚拟机字节码指令的地址.
执行的是Native方法,计数器值为空
其中方法区和堆是线程共享的数据区;其他区域是线程隔离的数据区