作者处于学习阶段,正在学习jvm,作为学生,我会用更通俗的说法,来叙述自己对jvm的了解。愿各位大佬看到有见解错误的地方和叙述不好的地方,能够帮忙纠正。来帮助大家更加深入的了解jvm。
1、运行时数据区的整体结构如下:
2、在java虚拟机中使用的运行时数据区中,有些会随着虚拟机退出而销毁,另外有一些是与线程一并销毁的。我个人的理解就是,虚拟机对应着一个进程,而进程中又有多个线程。其中临时存储的与线程相挂钩,而需要长久保留的是需要存储与整个进程之中。
线程独有 | 程序计数器、虚拟机栈栈、本地方法栈 |
线程共享 | 堆,方法区 |
3.程序计数器(PC寄存器)
JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟,在我们学习计算机组成原理时,也同样学习过PC寄存器,在组成原理中,PC寄存器是计数的,用来存储下一条指令的地址。而JVM中的PC寄存器也同样模拟出了该效果。
作用:PC寄存器用来存储指令向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。
PC寄存器是一块很小的内存空间,几乎忽略不记。也是运行速度最快的存取区域(说白了,它只需要存取下一个指令的地址,它只需要存下一条指令,出下一条指令,存的少,操作少,必然最快) 在JVM规范中,每个线程都有自己的程序计数器,线程私有,他的生命周期与线程相同。
任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,如果是在执行native方法,则是未指定值(undefned)。