jvm - 程数计数器 结构

程序计数器

作用 : 记住下一条jvm 指令 的执行地址

物理 寄存器

程数计数器通常是放在CPU(中央处理器)的寄存器(Register)中的。寄存器是CPU内部的一种高速缓存,用于存储指令、数据或者地址等信息。

​ 注意: 需要注意的是,寄存器的数量有限,且不同的CPU架构可能具有不同数量和类型的寄存器。因此,虽然程数计数器通常放在CPU的寄存器中,但随着线程数量的增加或者程序的复杂性,可能会出现寄存器不足的情况,这时候虚拟机可能会采取一些策略来进行寄存器分配和管理,以确保程序的正常执行。

特点

  1. ​ 线程私有
  2. 不会有内存溢出问题
    1. 固定大小: 程数计数器只是一个指针,用于存储当前线程执行的字节码指令地址。它的大小是固定的,通常是几个字节的大小,远远小于堆内存或栈内存的大小。因此,即使存在大量线程,每个线程的程数计数器也不会消耗大量内存。
    2. 线程私有: 每个线程都有自己的程数计数器,它们是线程私有的,不同线程之间不会共享。因此,即使有大量线程在运行,它们各自的程数计数器互不影响,也不会因此导致内存溢出。
    3. 随线程生命周期动态分配: 程数计数器通常是随着线程的创建和销毁而动态分配和释放内存空间的,而不是像堆内存那样需要预先分配一定的内存空间。这样可以避免因为大量线程存在而导致的内存浪费。

在这里插入图片描述

java 源码 -> 二进制字节码-> jvm 指令 -> 解释器 -> 机器嘛码-> cpu执行

JVM 指令集 - 机器码 执行

​ JVM 指令集与机器码之间的翻译是由 JVM 的即时编译器(JIT编译器)完成的。JIT编译器在运行时将Java字节码转换为机器码。

​ 具体翻译过程如下:

  1. 解释执行:当程序首次运行时,JVM 使用解释器来逐条读取并执行 Java 字节码。
  2. 即时编译(JIT编译):随着时间的推移,JVM 会将频繁执行的字节码编译成机器码,并进行优化,从而提高程序的执行效率。
  3. 机器码执行:执行编译后的机器码。

JIT编译器可以进行各种优化,例如:

  • 优化循环。
  • 去除死代码。
  • 优化内存访问。
  • 分析多线程代码,进行优化。

JIT编译器的类型有多种,例如 HotSpot JIT、C1 JIT、C2 JIT 等,它们在不同的阶段以不同的方式进行优化。

这个过程对于用户来说是透明的,不需要

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值