美文网首页
运行时数据区(三)

运行时数据区(三)

作者: salix_ | 来源:发表于2020-04-01 17:37 被阅读0次

一:总示:

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

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

1. 线程进程:
  • JVM是一个进程
  • 我们写一个java程序开启的是线程,所有的线程都包含在JVM这个线程中。
2.线程进程 和 运行时数据区的空间的关系:
  • 每一个线程对对应的都有自己的程序计数器、本地方法栈、虚拟机栈
  • 方法区和堆是线程共有的,也就是随着JVM生或死。(堆和方法区是线程公用的)


三:程序计数器

1.作用:

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

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

四:虚拟机栈

1.定义?

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

2.作用:

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

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

4.一个栈帧包含

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

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

2. 操作数栈:
  • 在方法执行的过程中,根据字节码指令的执行过程,数组进栈或出栈。是用来做加减乘除等操作的。
  • 如果A调用B,B有返回值,B的返回值会放到A的操作数栈中。(B返回后,A的字节码指令会先把返回值放在A的操作数栈)
3. 动态链接:

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

4. 方法返回地址:

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

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

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

相关文章

网友评论

      本文标题:运行时数据区(三)

      本文链接:https://www.haomeiwen.com/subject/urghdhtx.html