1.1运行时数据区

1.1运行时数据区

1.JVM结构(运行时数据区+执行子系统)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8pmbV7d-1686273854295)(C:\Users\10059\AppData\Roaming\Typora\typora-user-images\image-20220228174243174.png)]

2.程序计数器(线程私有)

1.作用:存储线程正在执行的指令地址,用于记录线程执行到了哪里

2.问题:

  • 为什么要有pc寄存器:(作用)
  • 为什么pc寄存器是线程私有:为了准确记录每一个线程执行到了哪里

3.特点:不存在GC和OOM问题

3.虚拟机栈(线程私有)

“栈管运行,堆管存储,但并不是说栈就不能存储”。比如逃逸分析-栈上分配,基本数据类型都是分配在java栈上

(1)基础知识

  1. 定义:每一个线程被创建后时都会创建一个虚拟机栈,内部保存着一个个栈帧,对应一个个方法调用

  2. 基本单位:栈帧

  3. 生命周期:和线程生命周期一致

  4. 特点:不存在GC问题,但存在OOM问题

  5. 运行原理:执行引擎只执行当前栈帧1[^ 2]。

(2)栈帧

包括局部变量表,操作数栈,动态链接,方法返回地址

①局部变量表
  1. 定义:是一个数组,存放编译期间可知的基本数据类型+对象引用+返回地址类型。局部变量表的大小(即slot数量)在编译期间当进入方法时就完全确定好了,局部变量表的大小由Slot数量决定
  2. 基本单位:Slot变量槽
    • 变量槽中除了long和double占2个槽位外,其余所有都占1个槽位
    • JVM为每一个Slot分配在局部变量表中的索引,从0开始
    • 如果当前栈帧是由构造方法或者非static方法创建的,则会把this放在索引0的槽位
    • 如果一个变量表过了其作用域,之后有新的变量进来会复用过期槽位(因为数组空间已经开辟)
②操作数栈
  1. 定义:在方法执行过程中,根据字节码指令把局部变量表中变量槽里的数据在操作数栈中入栈/出栈
③动态链接
  1. 定义:指向方法区中的运行时常量池的方法引用。即明确当前栈帧对应的方法到底是哪个方法
④方法返回地址
  1. 定义:存放调用该方法的pc寄存器的值。即明确当前方法执行到了哪

4.本地方法栈(线程私有)

  1. 作用:虚拟机栈为虚拟机执行java方法服务。本地方法栈为虚拟机执行native方法服务

  2. 特点 :不会有GC问题,但会有OOM问题(和虚拟机栈一样,在创建或者扩展失败时,就会报OOM)


5.堆(线程共享)

  1. 定义:每一个java进程创建时都会创建一JVM,一个JVM一个堆内存。保存几乎所有因为存在逃逸分析栈上分配)对象实例和数组+字符串常量池+静态变量
  2. 结构划分:经典分代结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgwQmuyP-1686273854296)(C:\Users\10059\AppData\Roaming\Typora\typora-user-images\image-20220302101151130.png)]

  1. 特点:存在GC和OOM

6.方法区(线程共享)

  1. 定义:每一个java进程创建时都会创建一JVM,一个JVM一个方法区(之前叫永久代) 。存放类型信息,运行时常量池**(JDK7开始把里面的字符串常量池移到堆),静态变量(JDK7开始移到堆)**,即时编译器-JIT缓存。又被称为“.class文件的仓库”

  2. 结构划分:类型信息^ 6.1+运行时常量池(存放直接引用^ 6.2 )+即时编译器-JIT缓存

    注意事项:常量池和final没有直接关系

image-20220302161104944
  1. 特点:存在GC和OOM
    mage-20220302161104944.png" alt=“image-20220302161104944” style=“zoom:67%;” />

  2. 特点:存在GC和OOM


  1. 线程当前调用的方法叫做当前栈帧。方法里会调用其它方法,此时就会有新的栈帧入栈成为当前栈帧。
    [^ 2]: 当前栈帧执行结束后会将返回结果传递给下一层栈帧。何时结束?①方法正常返回②遇到异常结束,那么会看当前栈帧是否处理,如果没法处理则会抛给上一层栈帧,看它是否处理,如果仍然不处理则继续往上抛。
    [^ 1]: ↩︎

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值