JVM体系结构
JVM内存结构
程序计数器
- 保存当前执行指令的地址,一旦指令执行,程序计数器将更新到下一条指令
虚拟机栈
- 每个线程运行时所需要的内存空间,称为虚拟机栈
- 每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存
- 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
栈帧
- 局部变量表
- 操作数栈
- 动态链接
- 方法返回地址
本地方法栈
- 类似虚拟机栈,线程私有
- 本地方法栈服务于JVM内的native方法
堆
- 用于存放对象的内存区域,是垃圾回收的主要区域
- 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建
- 堆在逻辑上分为新生代和老年代,新生代分为Eden区,ServivorFrom区,ServivorTo区
- Xms Xmx 设置堆的最小内存和最大内存
- jps查看jvm中的进程
- jmap查看某一个时刻的堆内存占用情况 jmap -heap 进程id
- jconsole 图形界面Java性能分析工具
方法区
- 存储每个类的结构
- 例如运行时常量池、字段、方法数据,以及方法和构造函数的代码,包括用于类和实例初始化以及接口初始化的特殊方法