jvm内存模型
堆
定义
- 堆也叫
堆内存
(Heap) - 是垃圾收集的主要区域,所以也叫
GC堆
作用
- 存放java对象实例
特点
- jvm内存中最大
- 线程共享
抛出异常
- OutOfMemoryError异常:堆中没有足够的内存空间完成对象实例的分配,且堆无法扩展
虚拟机栈
定义
- 虚拟机栈也叫栈内存(Stack)
- 方法执行的内存区域
作用
- 存储java方法执行时的局部变量
- 以帧的形式
- 含数据类型、对象的引用
- 方法执行结束后释放
特点
- 线程私有
- 生命周期与线程相同
抛出异常
- OutOfMenoryError异常:虚拟机栈扩展时无法申请到内存空间
- StackOverFlowError异常:线程请求栈深度 大于 虚拟机允许的深度
本地方法栈
十分类似java虚拟机栈,与java虚拟机区别在于:服务对象,
即java虚拟机栈为执行java方法服务‘
本地方法栈为执行Native方法服务
方法区
定义
- 堆的一个逻辑部分
- 为了与java堆区分,又称:非堆(Non-Heap)
作用
- 存储已被虚拟机加载的
类信息
、常量
、静态变量
等数据
特点
- 线程共享
抛出异常
- OutOfMemoryError异常:当方法区无法满足内存分配需求
运行时常量池
定义
- 方法区的一部分
作用
- 存放类文件在编译时生成的各种
字面变量
和符号引用
特点
- 动态性:运行时也可以添加新的常量
抛出异常
- OutOfMemoryError异常:当常量池无法申请到内存时
程序计数器
定义
- 当前线程所执行的字节码的
行号指示器
作用
- 实现异常处理,线程恢复等基础功能
原理
- 通过改变计数器的值,来选取下一条执行的字节码指令
特点
- 线程私有
- 内存空间小
抛出异常
- 唯一一个在jvm中无任何OutofMemoryError的内存区域