Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • Java基础

    • Java概述
    • Java语法
    • 面向对象编程
    • Java数组
    • String字符串
    • 异常处理
  • Java集合

    • Java集合概述
    • ArrayList
    • LinkedList
    • HashMap
    • LinkedHashMap
    • HashSet
    • TreeMap
    • Queue&Deque
  • Java并发

    • Java并发概述
    • 线程与进程
    • Thread类与线程生命周期
    • 线程安全
    • synchronized关键字
    • volatile关键字
    • Java内存模型(JMM)
    • 线程间通信
    • 线程池
    • 并发工具类
    • 原子操作类Atomic
    • 并发锁
    • 并发容器
    • ConcurrentHashMap
    • BlockingQueue
    • CopyOnWriteArrayList
    • ThreadLocal
    • Fork/Join框架
    • ScheduledThreadPoolExecutor
    • CompletableFuture
  • Java IO

    • Java IO概述
  • JVM

    • JVM概述
      • 1. JVM 体系结构
      • 2. 执行引擎
      • 3. JVM 内存管理
      • 4. 类加载机制
      • 5. JIT 编译与 AOT 编译
      • 6. JVM 调优工具
      • 7. 垃圾回收器
      • 8. JVM 的常见应用场景
      • 9. 总结
目录

JVM概述

Java 虚拟机(JVM,Java Virtual Machine)是 Java 语言跨平台特性的核心。它提供了一个运行 Java 字节码的抽象计算机环境,负责加载字节码、执行代码、内存管理和垃圾回收等任务。JVM 是 Java 程序执行的关键组件,也是理解 Java 性能优化和调试的重要部分。

关于JVM知识点的相关博客文章:

  • Java-JVM基础 (opens new window)
  • Java-JVM类文件结构 (opens new window)
  • Java-“手撕”Class文件结构 (opens new window)

# 1. JVM 体系结构

  • 类加载子系统(Class Loader Subsystem):负责将 .class 文件加载到内存中,并进行验证、准备、解析和初始化等过程。JVM 的类加载器分为三种:

    • 启动类加载器(Bootstrap ClassLoader):负责加载 Java 核心类。
    • 扩展类加载器(Extension ClassLoader):负责加载 Java 扩展库中的类。
    • 应用类加载器(Application ClassLoader):负责加载应用程序路径中的类。
  • 运行时数据区(Runtime Data Areas):JVM 在执行程序时会将数据存储在多个内存区域中,主要包括:

    • 方法区(Method Area):存储类的元数据、静态变量、常量等信息。
    • 堆(Heap):用于存储对象实例和数组,是 Java 垃圾回收管理的主要区域。
    • 虚拟机栈(Java Stack):用于存储局部变量、操作数栈、动态链接等,每个线程都有独立的虚拟机栈。
    • 本地方法栈(Native Method Stack):为 JVM 调用本地方法(如 C/C++ 代码)提供支持。
    • 程序计数器(PC Register):记录当前线程正在执行的字节码指令的地址。

# 2. 执行引擎

  • 解释器:将字节码逐行解释执行,适用于程序中的冷代码(即很少执行的代码)。
  • JIT 编译器(Just-In-Time Compiler):将字节码编译为机器码,以提高程序执行效率。JIT 编译器适用于热点代码,通过即时编译和优化,显著提高了程序的执行速度。
  • 垃圾回收器(Garbage Collector):负责回收堆内存中的无用对象,JVM 提供了多种垃圾回收算法和垃圾回收器,如 G1、CMS、Serial、Parallel 等。

# 3. JVM 内存管理

  • 堆内存管理:堆被划分为新生代和老年代,新生代中又进一步分为 Eden 区和 Survivor 区。
    • 新生代(Young Generation):存储新创建的对象,包括 Eden 区和两个 Survivor 区,年轻对象经过多次垃圾回收后会晋升到老年代。
    • 老年代(Old Generation):存储生命周期较长的对象。
  • 垃圾回收算法:JVM 采用了多种垃圾回收算法来管理内存:
    • 标记-清除算法:标记出需要回收的对象,再清除它们。
    • 复制算法:将存活对象从一块区域复制到另一块区域。
    • 标记-整理算法:标记出存活对象并将它们整理到内存的一端,清除无效对象。

# 4. 类加载机制

  • 双亲委派模型:JVM 的类加载机制采用双亲委派模型,加载类时,首先交由父类加载器加载,只有在父类加载器无法加载时,才由当前加载器加载。这样可以确保核心类库不会被重复加载。
  • 类的生命周期:类的生命周期包括加载、验证、准备、解析、初始化、使用和卸载几个阶段。每个阶段都有特定的任务和处理方式。

# 5. JIT 编译与 AOT 编译

  • JIT 编译器:JVM 的即时编译器会将热点代码编译为本地机器码,提升代码执行速度。JIT 编译能够在运行时进行代码优化,如内联方法、去除冗余代码等。
  • AOT 编译器(Ahead-Of-Time Compiler):在 Java 9 中引入,用于在程序运行前将字节码编译为本地代码,减少启动时间。

# 6. JVM 调优工具

  • JVM 参数:通过 JVM 参数可以调节 JVM 的行为,如堆大小、垃圾回收器类型等。常用参数包括 -Xmx、-Xms、-XX:+UseG1GC 等。
  • 监控与诊断工具:
    • JVisualVM:用于监控 JVM 的内存使用情况、线程活动、GC 等。
    • JConsole:用于监控 JVM 和应用程序的运行状态。
    • jstack:用于查看线程堆栈信息,帮助诊断死锁等问题。
    • jmap:用于生成堆内存快照,分析内存泄漏。

# 7. 垃圾回收器

  • Serial 垃圾回收器(JDK 1.3):单线程回收,适用于单核 CPU 的应用,停顿时间较长。JDK 8 默认用于客户端模式。
  • Parallel 垃圾回收器(JDK 1.4):多线程回收,适用于需要高吞吐量的应用,停顿时间相对较长。JDK 8 默认用于服务器模式。
  • CMS(Concurrent Mark-Sweep)(JDK 1.5):并发标记清除,减少了停顿时间,适用于需要低延迟的应用。
  • G1(Garbage First)(JDK 1.7):适用于大内存应用,能够以可控的停顿时间回收垃圾,通过分区回收提高效率。JDK 9 及以上版本推荐使用,JDK 17 默认使用 G1 垃圾回收器。

# 8. JVM 的常见应用场景

  • 内存溢出与泄漏排查:使用 jmap 和 jhat 分析内存快照,定位内存泄漏的位置和原因。
  • 性能调优:通过调整垃圾回收器、JVM 参数以及线程管理来优化程序性能,减少停顿时间,提高吞吐量。
  • 类加载分析:使用 -verbose:class 参数查看类加载过程,了解类加载的顺序和原因。

# 9. 总结

JVM 是 Java 程序运行的基础,它提供了跨平台的支持和强大的内存管理机制。理解 JVM 的体系结构、执行引擎、垃圾回收机制、类加载过程以及内存管理,对编写高效的 Java 程序至关重要。在日常开发中,JVM 的调优和监控工具能够帮助开发者诊断性能问题,优化应用程序的运行效率。

上次更新: 2024/11/01, 13:45:14
Java IO概述

← Java IO概述

Copyright © 2023-2024 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式