JVM篇笔记整理-PC寄存器

运行时数据区

JVM篇笔记整理-PC寄存器_第1张图片

红色部分代表一个进程一份(和虚拟机生命周期相同),而灰色的代表一个线程一份。

1.假设有5组线程,那么就有5组程序计数器、本地方法栈和虚拟机栈,这5组线程共享方法区和堆空间。

2.Java8以后改方法去叫做元数据区,使用的是本地内存。

JVM篇笔记整理-PC寄存器_第2张图片

1.在Hotspot JVM里, 每个线程都与操作系统的本地线程直接映射。当一个Java线程准备好执行以后,此时一个操作系统的本地线程也同时创建。Java线程执行终止后,本地线程也会回收。

2.操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run()方法。、

3.如果只剩下一个守护线程,那么就可以关闭虚拟机了。

PC寄存器

JVM篇笔记整理-PC寄存器_第3张图片

JVM篇笔记整理-PC寄存器_第4张图片

  • 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。

  • 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一-致。

  • 任何时间- -个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,如果是在执行native方法,则是未指定值(undefned)。

    既没有GC,也没有OOM的问题

JVM篇笔记整理-PC寄存器_第5张图片

个人理解:就是告诉虚拟机,将要执行一个什么动作,切换回此线程时,知道从哪里开始执行。

实例:

JVM篇笔记整理-PC寄存器_第6张图片

编译上面的实例程序,反编译class文件,得到main部分的编译代码如下:

JVM篇笔记整理-PC寄存器_第7张图片

左边的数字就是指令地址(也叫偏移地址)就是pc寄存器所存储的东西。右边的就是操作指令。

重点理解下图:

JVM篇笔记整理-PC寄存器_第8张图片

关于寄存器的两个问题:

JVM篇笔记整理-PC寄存器_第9张图片

理解:就是说假如有两条线程,第一个线程执行了一半,然后CPU切换执行了另一线程,这个线程执行完成以后就需要回到第一个线程,pc寄存器的目的就是记录第一个线程执行到哪里了,一遍回来接着执行。

你可能感兴趣的:(JVM篇)