课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java虚拟机的学习和应用是每一位Java编程开发程序员都需要熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,Java虚拟机pc寄存器的概念与用法分享。
Java虚拟机支持同时执行多个线程。每一个Java虚拟机线程都有自己的PC寄存器。在任何时刻,Java虚拟机一个线程都只在执行某一个单一函数代码。如果函数不是native函数,PC寄存器中就包含当前正在被执行的Java虚拟机指令的地址。反之当前函数是native函数,pc寄存器中的值是undefined。pc寄存器的大小足够存储返回地址或native指针。
(1)PC寄存器并非真正意义上的物理寄存器,pc寄存器是对物理寄存器的一种模拟;
(2)PC寄存器是一块较小的内存空间;
(3)可以将其看做当前线程执行的字节码指令的“行号指示器”;
(4)字节码解释器的工作就是改变pc寄存器的值来选取下一条需要执行的字节码指令;
(5)PC寄存器的作用是存储下一条指令地址,也就是即将要执行的指令代码,然后由执行引擎读取下一条指令;
(6)在Java虚拟机规范中,PC寄存器是线程私有的,其生命周期与线程生命周期保持一致;
(7)PC寄存器是Java虚拟机规范中没有规定任何OutOtMemoryError的区域。
什么是上下文切换?
当单核处理器执行多线程代码时,会为每个线程分配CPU时间片,CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是在切换前会保存上一个任务的状态,以便于下次切换回任务时,可以再次加载这个任务之前的状态。所以任务从保存到再一次加载的过程就是一次“上下文切换”。CPU通过不停进行上下文切换,让我们觉得多个线程是同时执行的。
什么是CPU时间片?
CPU时间片就是CPU分配给每个线程的时间段。由于CPU只有一个核数有限,只能同时处理程序的一部分任务,不能同时满足所有要求,为了公平处理多线程问题,就引入的时间片的概念,为每个线程分配时间片,轮流执行。
为什么PC寄存器是“线程私有”的?
由于Java虚拟机多线程是通过线程上下文切换的方式来实现的。在任何时刻,一个处理器只会执行一条程序中的指令,因此在上下文切换后为了能够恢复到正确的执行位置,每个线程都需要有一个独立的PC寄存器,线程之间独立存储,互不影响。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。