运行时数据区

运行时数据区

从类加载器过去以后就是运行时数据区,包括堆、方法区、本地方法栈等结构,执行引擎蛀牙负责操作并管理运行时数据区。一整个JVM当中只有一个运行时数据区,就是一个RunTime实例。
在这里插入图片描述
采用比喻的方式就是如下图:

堆、方法区等就是材料工具 是共享的
执行引擎就是厨师 是非共享的,每个线程有自己的一部分程序计数器、虚拟机栈和本地方法区,也就是红色区域是共享的,灰色区域可以有任意个。
操作台就是栈
以及负责回垃圾的GC,(守护线程,运行在后台)

在这里插入图片描述
运行时数据区具体组成
在这里插入图片描述

元数据区和JIT编译产物合称为方法去,也称为非堆区。

开始学习 - 程序计数器/PC寄存器

在这里插入图片描述
特点:

  1. 占用内存极小
  2. 每条线程一份,生命周期和当前线程一致。
  3. 每一个时间之后有一个方法在执行,如果是java方法,就会储存当前正在执行的java方法的JVM指令地址,如果是native方法,就是undifined.
  4. 占用内存不会溢出,且GC回收器也不会处理。

举例:

在这里插入图片描述
pc寄存器:
在这里插入图片描述

指令地址保存在PC寄存器当中,执行引擎会通过PC寄存器当中的地址执行相应的指令,操作变量或者其他。

使用PC寄存器存储指令地址有什么用?

1.因为CPU在不停的切换线程执行,若果不使用PC寄存器存储指令地址,再起执行时无法继续执行。
2.PC寄存器当中储存的是所有指令的地址,当执行完当前指令,后面执行什么指令就保存在PC寄存器当中。

PC寄存器为什么不像堆内存一样线程共享?

因为每个线程都可以准确执行所有字节码指令,防止发生冲突或异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值