虚拟机
Java虚拟机:JAVA字节码的虚拟计算机,就是二进制字节码的运行环境
特点:
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收
JVM运行在操作系统之上。硬件-操作系统--JVM--字节码--USER
JVM的生命周期:启动--执行--结束
- 虚拟机的启动是通过引导类加载器创建一个初始类来完成的
- 虚拟机的执行
- 程序开始执行时虚拟机才运行,程序结束虚拟机结束
- 执行一个所谓的Java程序时,真正在执行的是一个叫Java虚拟机的进程
- 虚拟机的退出
- 程序正常退出
- 执行过程中遇到异常或错误而终止
- 操作系统出现错误
- 某线程调用exit(),halt()
- JNI中卸载虚拟机
JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟,
PC寄存器用来存储指向下一条指令的地址;
是很小的内存空间,几乎可以忽略不计,也是运行速递最快的存储区域。
在JVM规范中,每个线程都有自己的程序计数器
任何时候一个线程都只有一个方法在执行,也就是所谓的当前方法
程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,若在执行native(本地方法栈)方法,则是未指定值
PC寄存器是程序控制流的指示器
字节码解释器的工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令
两个常见问题
- 使用PC寄存器存储字节码指令地址有什么用?
因为CPU需要不停的切换各个线程,切换回来以后需要直接接着从哪开始执行
- PC寄存器为什么设为线程私有
为了能够准确的记录各个线程正在执行的当前字节码指令地址
由于CPU时间片轮转限制,众多线程在并发执行过程中,任何一个确定的时刻一个处理器或多核处理器中的一个内核都只会执行程序中某一个线程。