jvm运行时数据区及pc

1 运行时数据区

1.1 运行时数据区内存结构

jvm启动时会使用到运行时数据区,其中是有与线程对应(随着虚拟机退出而销毁),另外一些则是与线程一一对应

每个线程:程序计数器,栈,本地栈

线程间共享:堆,方法区(jdk8后面是使用元空间-本地内存实现)

1.2 RunTime介绍

Runtime:运行时,是一个封装了JVM进程的类。每一个JAVA程序实际上都是启动了一个JVM进程,那么每一个进程都是对应这一个Runtime实例,其实例是由JVM为其初始化的。

2 线程

  • 线程是一个程序里的运行单元

  • HostPot jvm里的每个线程都是与操作系统的本地线程直接映射的

  • 当一个java线程准备好执行后,操作系统的本地线程也同时创建,java线程执行终止后,本地线程也会回收

  • 操作系统负责所有线程的安排到任何一个可用的cpu上,一旦本地线程初始化成功,它就会调用java线程的run方法

2.1 hostpot后台系统线程分类

  • 虚拟机线程:线程栈手机,线程挂起等

  • 周期任务线程:时间周期时间的体现(中断)

  • gc线程:对垃圾回收机制提供了支持

  • 编译线程:运行时将字节码编译成本地代码

  • 信号调度线程

3 pc寄存器

  • 这里存储指令相关信息,jvm中的pc寄存器是对物理寄存器的一种抽象模拟。

  • 每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程间的周期保持一致

  • pc计数器会存储当前线程正在执行java方法的jvm指令地址。如果执行的是本地方法 里面的值则是未定义的

作用:记录下一条要执行的字节码指令。是程序流程的指示器,异常处理、线程恢复等操作都要依赖程序计数器来完成。

流程


3.1 pc面试题

1.使用pc寄存器存储字节码指令地址有什么用?

因为cpu需要不停切换线程,这时候切换回来,就需要知道从哪里据需开始。

jvm的解释器需要通过改变pc来明确下一条应该执行什么样的字节码指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值