首页 > 其他 > 详细

JVM知识点总结(一)——运行时数据区

时间:2020-01-21 12:46:08      阅读:59      评论:0      收藏:0      [点我收藏+]

虚拟机规范的运行时数据区域:
技术分享图片

各区域简介:

1. 程序计数器(PC)

它是线程私有的,每个线程都会有一个独立的PC。它可以看做是当前线程所执行的字节码的行号指示器,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖它。

2. Java虚拟机栈:

它是线程私有的,它的生命周期与线程相同,他描述的是Java方法执行的内存模型,每个方法执行时都会创建一个栈帧用于存储局部变量表、操作数栈等。每一个方法从调用 直至完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
通常说的“堆栈”中的栈,指的是虚拟机栈的局部变量表部分。局部变量表存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用和returnAddress类型(指向一条字节码指令的地址)。局部变量表每个slot是32位,double和long会占用两个slot。

3.本地方法栈

作用和虚拟机栈相同,只不过它针对的是Native方法。在Hotspot虚拟机中,它和虚拟机栈实现到一起了。

4.Java堆

它是线程共享的,虚拟机启动时创建。它是Java虚拟机所管理的内存中最大的一块,虚拟机规范描述为:“所有的对象实例和数组都在堆上分配”,但是由于JIT和逃逸分析等技术,在具体虚拟机实现上可能存在特殊情况。它是垃圾收集器管理的主要区域。(具体的划分请看垃圾回收篇)Java堆可以存在于物理上不连续的空间上,只要逻辑上连续即可。

5.方法区

它是线程共享的,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
在Hotspot虚拟机中,方法区被实现为“永久代”,JDK8中被实现为“元空间”。垃圾回收器也会在这个区域进行垃圾回收,只不过出现的次数很少,而且回收效率也很低。
运行时常量池是方法区的一部分,它与类加载机制的内容关联较多。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息时常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

参考链接

  1. 《深入理解Java虚拟机(第2版)》
  2. JVM知识点总结(二)——垃圾回收
  3. JVM知识点总结(三)——对象的创建与类加载过程
  4. JVM知识点总结(四)——即时编译(JIT)

JVM知识点总结(一)——运行时数据区

原文:https://www.cnblogs.com/Xtick/p/12221050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!