IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JVM整体架构,你了解吗 -> 正文阅读

[Java知识库]JVM整体架构,你了解吗

JVM整体架构

根据 JVM 规范,JVM 内存共分为方法区虚拟机栈本地方法栈程序计数器五个部分。
在这里插入图片描述
在这里插入图片描述
JVM分为五大模块:
类装载器子系统 、 运行时数据区 、 执行引擎 、 本地方法接口 和 垃圾收集模块
在这里插入图片描述
如上图所示,JVM 主要分为三个子系统:类加载器、运行时数据区和执行引擎。

1. 类装载器子系统

它主要功能是处理类的动态加载,还有链接,并且在第一次引用类时进行初始化。

Loading - 加载,顾名思义,用于加载类,它有三种类加载器,根据双亲委托模型,从不同路径进行加载:

  • Bootstrap ClassLoader - 加载 rt.jar 核心类库,是优先级最高的加载器
  • Extension ClassLoader - 负责加载 jre\lib\ext 文件夹中的类
  • Application ClassLoader -负责加载CLASSPATH 指定的类库

Linking - 链接,动态链接到运行时所需的资源,分为三步:

  • Verify - 验证:验证生成的字节码是否正确
  • Prepare - 准备:为所有静态变量,分配内存并赋予默认值
  • Resolve - 解析:将 class 文件常量池中所有对内存的符号引用,替换成到方法区的直接引用

Initialization - 类初始化,类加载的最后阶段,这里对静态变量进行赋值,并执行静态块。(注意区分对象初始化)

2. 运行时数据区

Java 虚拟机有自动内存管理机制,如果出现内存方面的问题,排查错误就必须要了解虚拟机是怎样使用内存的。
在这里插入图片描述
Java7和Java8内存结构的不同主要体现在方法区的实现
方法区是java虚拟机规范中定义的一种概念上的区域,不同的厂商可以对虚拟机进行不同的实现。

我们通常使用的Java SE都是由Sun JDK和OpenJDK所提供,这也是应用最广泛的版本。而该版本使用的VM就是HotSpot VM。通常情况下,我们所讲的java虚拟机指的就是HotSpot的版本。

JDK7 内存结构
在这里插入图片描述
JDK8 的内存结构
在这里插入图片描述
针对JDK8虚拟机内存详解
在这里插入图片描述
JDK7和JDK8变化小结
在这里插入图片描述
线程私有的:
①程序计数器
②虚拟机栈
③本地方法栈

线程共享的:
①堆
②方法区
直接内存(非运行时数据区的一部分)

  • PC 寄存器(程序计数器):保存正在执行的字节码指令的地址
  • :在方法调用时,创建一个叫栈帧的数据结构,用于存储局部变量和部分过程的结果,栈帧由以下几部分组成:
    局部变量表:存储方法调用时传递的参数,从0开始存储this、方法参数、局部变量
    操作数栈:执行中间操作,存储从局部变量表或对象实例字段复制的常量或变量值,以及操作结果,另外,还用来准备被调用方法的参数和接受方法调用的返回结果
    动态链接:一个指向运行时常量池的引用,将 class 文件中的符号引用(描述一个方法调用了其他方法或访问成员变量)转为直接引用
    方法返回地址:方法正常退出或抛出异常退出,返回方法被调用的位置
  • :存储类实例对象和数组对象,垃圾回收的主要区域
  • 方法区:也被称为元空间,还有个别名 non-heap(非堆),使用本地内存存储 class meta-data 元数据(运行时常量池,字段和方法的数据,构造函数和方法的字节码等),在 JDK 8 中,把 interned String 和类静态变量移动到了 Java 堆
  • 本地方法栈:与 JVM 栈类似,只不过服务于 Native 方法

3. 执行引擎

运行时数据区存储着要执行的字节码,执行引擎将会读取并逐个执行。

Interpreter - 解释器,它对字节码的解释很快,但执行慢,有个缺点是,当方法被多次调用时,每次都需要重新解释。

JIT Compiler- JIT编译器, 解决了解释器的缺点,仍使用解释器来转换字节代码,但发现有代码重复执行时,会使用 JIT 编译器,将整个字节码编译成本地代码,将本地代码用于重复调用,从而提高系统的性能,有以下几部分组成:

  • 中间代码生成器 - 生成中间代码 代码优化器
  • 负责优化上面生成的中间代码 目标代码生成器
  • 负责生成机器代码或本地代码
  • Profiler 一个特殊组件,负责查找热点,判断该方法是否被多次调用

4. Garbage Collector- 垃圾收集器

收集和删除未引用的对象。

另外,还包括执行引擎所需的本地库(Native Method Libraries)和与其交互的 JNI 接口(Java Native Interface)。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:02:30  更:2021-07-15 16:03:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:19:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码