jvm内存模型

Author Avatar
丁起男 09月 11,2020
  • 在其它设备中阅读本文章

jvm内存模型

定义

  • 堆也叫堆内存(Heap)
  • 是垃圾收集的主要区域,所以也叫GC堆

作用

  • 存放java对象实例

特点

  • jvm内存中最大
  • 线程共享

抛出异常

  • OutOfMemoryError异常:堆中没有足够的内存空间完成对象实例的分配,且堆无法扩展

虚拟机栈

定义

  • 虚拟机栈也叫栈内存(Stack)
  • 方法执行的内存区域

作用

  • 存储java方法执行时的局部变量
    • 以帧的形式
    • 含数据类型、对象的引用
    • 方法执行结束后释放

特点

  • 线程私有
  • 生命周期与线程相同

抛出异常

  • OutOfMenoryError异常:虚拟机栈扩展时无法申请到内存空间
  • StackOverFlowError异常:线程请求栈深度 大于 虚拟机允许的深度

本地方法栈

十分类似java虚拟机栈,与java虚拟机区别在于:服务对象,

即java虚拟机栈为执行java方法服务‘

本地方法栈为执行Native方法服务

方法区

定义

  • 堆的一个逻辑部分
  • 为了与java堆区分,又称:非堆(Non-Heap)

作用

  • 存储已被虚拟机加载的类信息常量静态变量等数据

特点

  • 线程共享

抛出异常

  • OutOfMemoryError异常:当方法区无法满足内存分配需求

运行时常量池

定义

  • 方法区的一部分

作用

  • 存放类文件在编译时生成的各种字面变量符号引用

特点

  • 动态性:运行时也可以添加新的常量

抛出异常

  • OutOfMemoryError异常:当常量池无法申请到内存时

程序计数器

定义

  • 当前线程所执行的字节码的行号指示器

作用

  • 实现异常处理,线程恢复等基础功能

原理

  • 通过改变计数器的值,来选取下一条执行的字节码指令

特点

  • 线程私有
  • 内存空间小

抛出异常

  • 唯一一个在jvm中无任何OutofMemoryError的内存区域