JVM内存与垃圾回收 运行时数据区、线程、与程序计数器

运行时数据区、线程、与程序计数器

运行时数据区

JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM高效的运行。
在这里插入图片描述
又是这张熟悉的图,它就是JVM运行时数据区,其中方法区和堆是所有线程共享的,生命周期与JVM的生命周期一样。程序计数器和栈是线程私有的,即每一个线程都独享一份。
每一个JVM对应一个Runtime实例,称为运行时数据区。

线程

线程的概念大家都很熟悉了,jvm运行多个线程并行执行。 在HotSpot虚拟机里面,每个线程都与本地线程直接映射。 本地线程与jvm线程同时存在。
线程分为:守护线程和普通线程。
GC就是一个守护线程,不需要我们去管理,由系统自己维护。

程序计数器

PC程数计数寄存器其实就是指令计数器,它的作用是用来存放指向下一条指令的地址,也是即将要执行的指令。由执行引擎读取下一条指令。
执行引擎在后面会开博文去阐述。

两个常见问题

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

​ 为什么使用pc寄存器记录当前线程的执行地址?

因为CPU需要不停的切换线程,在一次上下文切换中,如果不知道指令执行在哪个地方,那么就会造成程序的崩溃,所以pc寄存器中的指令地址可以使得cpu在切换线程回到之前线程的时候可以记得当前线程执行到了哪一步。
JVM字节码解释器就通过PC寄存器的值来明确下一条指令的执行。

PC寄存器为什么是线程私有的?
很好理解啊,就是多线程在某一个特定的时间内只会执行一个方法,cpu不停的做任务切换,这样必然会导致中断和恢复。那么为了能够准确的保证方法执行到哪一步能被很好的记住,那么就需要为每一个线程分配一个单的pc寄存器,这样线程之间就会独立计算,不会互相干扰。
每个线程其实就是对应每一个方法,对应一个栈帧和一个pc。栈帧的概念,在后面栈的时候会很明确的去阐述。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值