当前位置: 首页 > news >正文

JVM架构图是怎样的?

一、JVM架构图概览

+--------------------------+
|       类加载子系统       |
|  (Class Loader Subsystem)|
+--------------------------+↓
+--------------------------+
|      运行时数据区        |
|   (Runtime Data Areas)   |
|   ├── 方法区/元空间      |
|   ├── 堆                 |
|   ├── 程序计数器         |
|   ├── 虚拟机栈           |
|   └── 本地方法栈         |
+--------------------------+↓
+--------------------------+
|       执行引擎           |
|    (Execution Engine)    |
|    ├── 解释器            |
|    ├── JIT编译器         |
|    └── 垃圾收集器        |
+--------------------------+↓
+--------------------------+
|    本地接口与库          |
| (Native Interface/Lib)   |
|    ├── JNI               |
|    └── 本地方法库        |
+---------------- catcher

二、核心组件详解

  1. 类加载子系统(Class Loader Subsystem)
  • 功能:动态加载.class文件到方法区,并完成验证、准备、解析和初始化。
  • 类加载器层次:
    • 启动类加载器(Bootstrap):加载JRE核心类(如rt.jar)。
    • 扩展类加载器(Extension):加载jre/lib/ext目录下的类。
    • 应用类加载器(Application):加载用户类路径(ClassPath)中的类。
    • 自定义类加载器:支持动态加载网络资源或实现热部署。
  1. 运行时数据区(Runtime Data Areas)
  • 线程共享区域:
    • 方法区/元空间(Method Area/Metaspace):
      • 存储类元数据(类结构、常量池、静态变量)。
      • JDK 8前:永久代(PermGen),内存受JVM限制;JDK 均使其用本地内存,无固定上限。
    • 堆(Heap):
      • 存储对象实例和数组,分新生代(Eden + Survivor区)和老年代。
      • 垃圾回收主要针对堆内存。
  • 线程私有区域:
    • 程序计数器(PC Register):记录当前指令地址,唯一不抛出OOM的区域。
    • 虚拟机栈(VM Stack):每个方法调用创建一个栈帧(局部变量表、操作数栈)。
    • 本地方法栈(Native Method Stack):服务本地方法(如C/C++)。
  1. 执行引擎(Execution Engine)
  • 功能:将字节码转换为机器指令并执行。
  • 核心组件:
    • 解释器(Interpreter):逐行解释字节码,启动阶段使用。
    • 即时编译器(JIT Compiler):
      • 将热点代码编译为本地机器码,提升性能(如G1/ZGC收集器)。
    • 垃圾收集器(Garbage Collector):
      • 管理堆和方法区内存,算法包括分代收集、标记-整理等。
  1. 本地接口(Native Interface)
  • 功能:允许Java调用本地方法(如C/C++库)。
  • 核心组件:
    • JNI(Java Native Interface):提供API实现跨语言交互。
    • 本地方法库(Native Method Libraries):存储本地代码实现。

三、JVM执行流程

  1. 编译:Java源码 → 字节码(.class文件)。
  2. 加载:类加载子系统将字节码加载到方法区。
  3. 执行:
    • 解释器逐行执行字节码,JIT编译器优化热点代码。
    • 线程通过虚拟机栈执行方法,程序计数器记录指令地址。
  4. 内存管理:
    • 堆分配对象实例,GC回收无用对象。
    • 方法区存储类元数据,元空间溢出时抛OutOfMemoryError: Metaspace

四、关键优化点

  • 堆内存:通过-Xms-Xmx设置初始和最大堆大小。
  • 元空间:通过-XX:MetaspaceSize-XX:MaxMetaspaceSize限制元空间大小。
  • 垃圾收集器:选择G1、ZGC等低延迟收集器(如-XX:+UseG1GC)。

五、JDK版本演进

  • JDK 8:永久代(PermGen)被元空间(Metaspace)取代,元空间使用本地内存。
  • JDK 11+:ZGC成为正式特性,支持低延迟垃圾回收。
    通过以上架构图和组件关系,可清晰理解JVM如何实现跨平台、自动内存管理及高效执行。实际应用中需结合监控工具(如VisualVM、JConsole)进行性能调优。
http://www.dtcms.com/a/358665.html

相关文章:

  • 算法(④KMP)
  • SpringAI应用开发工程师高阶面试剧本与知识点全解析(含RAG、多租户、流式推理、企业落地场景)
  • Python3 lambda(匿名函数)
  • HBase高效并发锁:IdLock极简内存设计
  • Qt QML注册全局对象并调用其函数和属性
  • 银河麒麟Kylin系统编译安装Qt5.12.12
  • Yolov8损失函数:回顾Yolov8-Loss
  • ​导游|基于SprinBoot+vue的在线预约导游系统
  • DrissionPage 实战:高效爬取网页数据并保存为 CSV 的全流程解析
  • (链表)Leetcode206链表反转+Leetcode6删除链表的倒数第N个结点+虚拟头节点使用
  • Linux 笔记 Day01|课程结构
  • 第三弹、AI、LLM大模型是什么?
  • 深度学习重塑医疗:四大创新应用开启健康新纪元
  • MySQL-事务(上)
  • 【Linux】如何使用 Xshell 登录 Linux 操作系统
  • Linux 下 Docker 容器部署指南(Java + Redis 示例)
  • ⭐CVPR2025 自动驾驶半监督 LiDAR 分割新范式:HiLoTs 框架深度解析
  • 设置word引用zotero中的参考文献的格式为中文引用格式或中英文格式
  • Shell编程核心入门:参数传递、运算符与流程控制全解析
  • SEO关键词布局总踩坑?用腾讯云AI工具从核心词到长尾词一键生成(附青少年英语培训实操案例)
  • [吾爱原创] 千千每日计划
  • Java全栈工程师面试实录:从基础到微服务的全面技术解析
  • 系统架构设计师选择题精讲与解题技巧
  • Spring Boot 自动配置原理深度解析:从启动流程到监听机制
  • 学习Python中Selenium模块的基本用法(10:浏览器操作)
  • 【物联网】BLE Fundamentals 核心概念总结-广告-读写特征-LED控制-传感器通知-上下游通信过程
  • CSDN博客语法(不常用但有用)
  • 年化225%,回撤9%,夏普4.32,3积分可查看参数
  • 【光照】[光照模型]是什么?以UnityURP为例
  • Excel工作技巧