JVM内存区域

JVM 内存分区

 

线程私有区(生命区域与用户线程强相关)

  • Java虚拟机栈
  • 本地方法栈
  • 程序计数器

线程共享区域(生命周期与JVM进程强相关)

  • 方法区
  • 运行时常量池

分区详述

线程私有区域

程序计数器

  • 程序计数器是一块很小的内存空间,可看作是当前进程所执行的字节码行号指示器,存放指令,记录当前进程走到哪
  • 程序计数器是 JVM 运行时区域唯一一块不会放出 OOM(OutOfMemoryError)区域
  • 线程私有:在单核处理器中,JVM 线程是通过线程轮流切换并分配处理器执行时间 的方式实现,在某个时刻只有一个线程运行在 CPU 上;每个线程独有的区域互不影响,独立存储,叫做线程私有空间

Java虚拟机栈

  • Java虚拟机栈描述的是Java方法的内存模型,生命周期与线程相同,和线程强相关
  • Java方法执行的同时会在虚拟机栈中开辟栈帧,用来存放局部变量表,操作数栈,动态链接,方法出口等信息;每一个方法的调用和执行结束,对应着栈帧的入栈和出栈的过程
  • 局部变量表(所需内存在编译期间分配,执行期间不会改变局部变量表的大小):存放编译期间可知的各种基本数据类型(8大数据类型)、对象的引用
  • Java虚拟机栈一种会出现两种异常:
  • StackOverFlowError 栈溢出:线程请求的栈的深度大于虚拟机允许的深度
  • OOM 异常:虚拟机栈在动态扩展时无法申请到足够的内存抛出的OOM

本地方法栈

  • 本地方法栈和Java虚拟机栈的作用完全相同,只不过本地方法栈为native方法服务,而虚拟机栈为Java方法服务

线程共享区域

  • 堆是 JVM 管理的最大内存区域,线程共享,在 JVM 进程启动时创建,所有的对象实例与数组都在堆上分配
  • 堆是垃圾回收器管理的主要内存区域;如果堆中没有足够的内存完成实例分配,并且无法再扩展时,抛出 OOM

方法区(也会产生 OOM )

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

常量池

  • 主要用来存放字符串常量

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值