来源:https://www.cnblogs.com/dolphin0520/p/3613043.html
程序计数器:保证了程序的正常执行,可以看做当前线程所执行字节码的行号(实际是指令的偏移地址)指示器,
字节码解释器工作室就是通过改变这个计数器的值来选择下一条需要执行的字节码指令,(https://blog.csdn.net/youngyouth/article/details/79868299)
特点:
- 线程私有的
- 是java虚拟机规范里面, 唯一 一个 没有规定任何 OutOfMemoryError 情况的区域(因为程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,当执行到下一条指令的时候,改变的只是程序计数器中保存的地址,并不需要申请新的内存来保存新的指令地址)
- 生命周期随着线程,线程启动而产生,线程结束而消亡
- 当线程执行的是本地方法的时候,程序计数器中保存的值是空(undefined);原因很简单:本地方法是C++/C 写的,由系统调用,根本不会产生字节码文件
本地方法栈
堆:gc
方法区
类信息:
1.类的完整有效名;
2.这个类型直接父类的完整有效名(除非这个类型是interface或是
java.lang.Object,两种情况下都没有父类) ;
3.这个类型的修饰符(public,abstract, final的某个子集) ;
4.这个类型直接接口的一个有序列表;
类型的常量池( constant pool)
域(Field)信息
方法(Method)信息
除了常量外的所有静态(static)变量
常量:non-final类变量被存储在声明它的
类信息内,而final类被存储在所有使用它的类信息内。