JVM运行时数据区-程序计数器
运行时数据区分为:
程序计数器(PC寄存器)、虚拟机栈、本地方法栈、方法区、堆区
线程共享区:方法区,堆区。
线程独立区:程序计数器(PC寄存器)、虚拟机栈、本地方法栈。
JVM线程:
1.一个JVM线程对应一个Runtime(运行时数据区)
2.JVM允许一个应用有多个线程并执行。
3.当一个Java线程准备好执行后,此时操作系统的本地线程也同时创建,Java线程执行终止后,本地线程也会回收。
4.当一个Java线程准备好执行后(初始化-> 1) 程序计数器 2)虚拟机栈 3)本地方法栈),此时操作系统的本地线程也同时创建并初始化,本地线程初始化成功后,就会调用Java线程中的run()方法
如果Java线程启动,发现未处理异常,Java线程终止,操作系统线程决定要不要回收取决于该线程是守护线程或普通线程。
程序计数器:(PC寄存器 Program Counter Register)
寄存器存储指令相关现场信息,CPU只有把数据装载到寄存器中才能够运行。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。
PC寄存器作用:
PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码,由执行引擎读取下一条指令。
PC寄存器介绍:
1.PC寄存器是一块很小的内存空间,也是运行速度最快的存储区域。没有GC。
2.在JVM规范中,每个线程都有独立的程序计数器,线程私有的,生命周期与线程生命周期保持一致。
3.程序计数器指令会在存储当前线程正在执行的Java方法的Jvm地址,如果是正在执行Native(本地)方法,则是未指定值(undefined)。
字节码解释器工作是通过改变程序计数器值来选取下一条需要执行的字节码指令。
唯一一个在Java虚拟机规范中没有规定任何Out Of Memory(内存溢出)情况的区域。