写点什么

一篇文章带你快速理解 JVM 运行时数据区 、程序计数器详解 (手画详图

用户头像
极客good
关注
发布于: 刚刚

地点:湖南一个小城市邵阳


作者:博主

一篇文章带你快速理解 JVM 运行时数据区 、程序计数器详解详解 (手画详图)值得收藏!!!


一、运行时数据区



图示:


补充一个点: 在运行时数据区中,灰色的为单独线程私有的,红色的为多个线程共享的,即:


  • 每个线程:独立包括程序计数器、栈、本地栈。

  • 线程间共享:堆、堆外内存(永久代或元空间、代码缓存)

运行时数据区的完整图:

不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。这里给出一张完整的运行时数据区图。??



看完上面的两张图,我想应该对 JVM 中所谓的运行时数据区有个大概印象了吧。下面??会给大家再给大家带来一些粗略的讲解哈。

运行时数据区概述:

当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 ???♂?



运行时数据区,Runtime Data Area,用于保存 java 程序运行过程中需要用到的数据和相关信息;经常说的把数据读到内存,包括类加载之后的信息,从磁盘读取文件信息等。即:Java 虚拟机在执行 Java 程序的过程中,会将涉及的数据划分到不同的内存区域去管理。


课间休息会



二、程序计数器(Program Counter)



概述:

程序计数器是用于存放下一条指令所在单元的地址的地方。


当执行一条指令时,首先需要根据 PC 中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC 中的地址或自动加 1 或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据 PC 取出第二条指令的地址,如此循环,执行每一条指令。


JVM 中的 PC 寄存器是对物理 PC 寄存器的一种抽象模拟。


程序计数器是线程私有内存,是唯一一个在 java 虚拟机规范中没有规定任何 OutOfMemoryError 的区域。

代码讲解

JAVA 代码编译后的字节码在未经过 JIT(实时编译器)编译前,其执行方式是通过“字节码解释器”进行解释执行。**简单的工作原理为解释器读取装载入内存的字节码,按照顺序读取字节码指令。**读取一个指令后,将该指令“翻译”成固定的操作,并根据这些操作进行分支、循环、跳转等流程。


例如:



使用 javap -c -verbose ClassCode.class 命令反编译出来结果为:

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图