1.PC寄存器
程序计数器
程序计数器是一块较小的线程私有的内存空间,可以看作是当前线程所执行的字节码的行号指示器
。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。
从上面的介绍中我们知道程序计数器主要有两个作用:
- 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的
流程控制
,如:顺序执行、选择、循环、异常处理。 - 在
多线程
的情况下,程序计数器用于记录当前线程执行的位置
,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。
2.方法区
方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量
、即时编译器编译后的代码
等数据。虽然 Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。
静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存储在方法区中,但是实例变量存储在堆内存中,和方法区无关。
存储:static final class模板