01 概述
class文件通过类加载子系统加载、链接、初始化到运行时数据区,然后执行引擎执行运行时数据区中的数据。
线程私有:程序计数器、虚拟方法栈、本地方法栈。跟随线程的开始和结束而创建和销毁。
线程共享:堆、方法区。随着虚拟机的退出而销毁。
一个Java应用程序即一个JVM只有一个Runtime实例,即运行时环境,对应一个运行时数据区。
(1)线程
在Hotspot JVM中,每个线程与操作系统的本地线程直接映射(1:1)。即一个Java线程准备(程序计数器、虚拟方法栈、本地方法栈等)好执行后,一个操作系统的本地线程会同时创建。Java线程执行终止后,本地线程也会回收。
操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功后,就会调用Java线程中的run()方法。
(2)JVM系统线程
虚拟机线程,到安全点出现;周期任务线程;GC线程;编译线程;信号调度线程。
02 PC寄存器
(1)概念
PC寄存器存储下一条指令的地址,即将要执行的指令代码。由执行引擎读取下一条指令。
- 程序计数器存储当前线程正在执行的Java方法的JVM指令地址,若是native方法,则是未指定值。
- 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能需要其完成。
- 字节码解释器工作时就是通过改变该寄存器的值选取下一条需要执行的字节码指令。
- 唯一没有OutOfMemoryError的区域。