运行时数据区(三)

2020-04-01  本文已影响0人  salix_

一:总示:

JVM标准规定的运行时数据区
现在真实的HotSpot运行时数据区(JDK1.8以及之后的图,JDK1.8之前不叫元空间,叫永久代)

二:线程和进程在JVM中以及和运行时数据区的空间的关系

1. 线程进程:
2.线程进程 和 运行时数据区的空间的关系:

三:程序计数器

1.作用:

每个线程都有,记录每个线程自己下一步执行的指令的位置(如果使用的是native方法,寄存器不指定值)。其实就是操作系统线程的PC。

2.是java唯一没有OutOfMemeyError的运行时数据区

四:虚拟机栈

1.定义?

每个java线程被创建的时候,都会创建一个虚拟机栈,里面保存栈帧,对应着一个个方法的调用。

2.作用:

主管java程序的使用, 保存方法的局部变量(基本数据类型+对象类型的引用)、部分结果、并参与方法的调用和返回。

3.是否固定栈大小分别对应的异常

4.一个栈帧包含

1. 局部变量表:
通过定义一个数字数组,来存储方法参数和定义在方法体内的局部变量

//如果是非static方法,会加一个对象的引用this。在每个栈帧第0哥slot的地方。

2. 操作数栈:
3. 动态链接:

.class文件被记载到内存之后,所有的方法、属性都在常量池之中,有一个编号,字节码里都是对运行时常量池里面的东西的引用。动态链接就是字节码指令真正执行的时候,将对常量池中方法、属性、类等的间接引用变成直接引用。

4. 方法返回地址:

存了一个pc寄存器的值,可以直接返回。

5. 一些附加信息:(不重要)

例如对程序调试提供支持。

上一篇下一篇

猜你喜欢

热点阅读