概览图
1. 内存角色
内存中主要涉及到的角色有
方法区,堆,虚拟机栈,程序计数器,本地方法栈
1.1 方法区
方法区主要存储加载的class类元数据,包括类型信息,运行时常量池(不包含字符串常量),域信息,方法信息等
1.2 堆区
堆区又分为新生代和老年代,新生代又分为Eden,s0,s1区,是垃圾回收的重点区域,主要存储new出来的对象,还有几个特殊的对象,Class对象及内部的静态变量都在这边,字符串常量池
1.3 虚拟机栈
虚拟机栈主要负责方法的运行,加载栈帧,栈帧中含有指向方法区运行时常量池该方法的引用,在当前实际执行类型对象中寻找这个方法,若没有则在执行类型的父类中寻找,直到找到为止,找不到则抛出异常。栈帧是虚拟机栈中存储的对象,栈帧中包含局部变量表,操作数栈,动态链接,方法返回地址,附加信息
1.4 程序计数器
存储当前指令的地址,保证线程切换的时候可以准确找到执行位置
1.5 本地方法栈
和虚拟机栈类似,虚拟机栈执行的是java方法,本地方法栈执行的是非java方法
2. 线程共享性
- 线程共享:堆区,方法区
- 线程独有:程序计数器,虚拟机栈,本地方法栈