JVM 学习前置知识

发布于:2025-03-22 ⋅ 阅读:(23) ⋅ 点赞:(0)

JVM 学习前置知识

Java 开发环境层次结构解析

下图展示了 Java 开发环境的层级关系及其核心组件,从底层操作系统到上层开发工具,逐步构建完整的开发与运行环境:


在这里插入图片描述

1. 操作系统(Windows, MacOS, Linux, Solaris)

  • 作用:为所有上层组件提供基础运行平台。
  • 特点:Java 通过 JVM 实现跨平台能力,开发者无需针对不同操作系统单独编写代码。

2. JVM(Java Virtual Machine)

  • 定位:位于操作系统之上,是 Java 跨平台能力的核心。
  • 功能
    • 解释执行字节码(.class 文件)。
    • 管理内存分配与垃圾回收。
    • 提供运行时环境(如线程管理、异常处理)。

3. JRE(Java Runtime Environment)

  • 组成:JVM + 基础类库(如 java.lang, java.util)。
  • 作用:为 Java 程序提供运行时环境,支持程序的执行。
  • 适用场景:普通用户只需安装 JRE 即可运行已编译的 Java 程序。

4. JDK(Java Development Kit)

  • 组成:JRE + 开发工具(如 javac 编译器、jar 打包工具、调试器)。
  • 作用:开发者使用 JDK 编写、编译和调试 Java 代码。
  • 核心工具
    • javac:将 .java 文件编译为 .class 字节码。
    • java:启动 JVM 并运行程序。
    • jdb:调试工具。

5. 开发 JavaSE 程序

  • 所需组件:JDK + IDE 工具(如 IntelliJ IDEA、Eclipse)。
  • 用途:开发标准 Java 应用程序,如桌面应用、命令行工具等。
  • 示例:使用 Swing 开发 GUI 应用,或编写简单的算法程序。

6. 开发 JavaEE 程序

  • 所需组件:JDK + 应用服务器(如 Tomcat、WildFly) + IDE 工具。
  • 用途:开发企业级分布式应用,支持 Web 服务、数据库交互等复杂场景。
  • 核心技术
    • Servlet/JSP:处理 HTTP 请求与响应。
    • EJB:实现业务逻辑组件。
    • JPA:数据库持久化操作。
  • 应用服务器角色:提供容器管理、事务控制、安全性等企业级功能。

依赖关系总结

操作系统 
└── JVM 
    └── JRE(JVM + 基础类库) 
        └── JDK(JRE + 编译工具) 
            ├── JavaSE 开发(JDK + IDE) 
            └── JavaEE 开发(JDK + 应用服务器 + IDE)

引言

Java 虚拟机(JVM)是 Java 生态系统的核心组件,它使得 Java 能够实现“一次编写,到处运行”的特性。理解 JVM 的底层原理,不仅能帮助我们编写高性能的代码,还能有效解决实际开发中的疑难问题(如内存泄漏、性能瓶颈等)。


什么是 JVM?

定义:

Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境)

JVM 核心组件

  1. 类加载器(ClassLoader):加载 .class 文件到内存。
  2. 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈、程序计数器。
  3. 执行引擎:解释或编译执行字节码。
  4. 垃圾回收器(GC):自动回收不再使用的对象。

JVM的好处

  1. ​ 一次编写,到处运行
  2. ​ 自动内存管理,垃圾回收功能
  3. ​ 数组下标越界检查
  4. ​ 多态

学习 JVM 有什么用?

  1. 性能调优
    • 通过调整堆内存大小(-Xms, -Xmx)或选择垃圾回收器(如 G1、ZGC)优化应用性能。
  2. 排查问题
    • 分析内存溢出(OOM)、死锁等问题(工具:jstack, jmap, VisualVM)。
  3. 深入理解 Java 特性
    • 理解多线程(线程栈模型)、异常处理(异常表)等底层机制。
  4. 面试高频考点
    • JVM 内存模型、垃圾回收算法、类加载机制等是 Java 后端面试的常见问题。

常见的 JVM 实现

名称 特点
HotSpot Oracle 官方默认 JVM,应用最广泛,支持多种垃圾回收器和优化策略。
OpenJ9 IBM 开发,低内存占用和高启动速度,适合云原生和微服务场景。
GraalVM 支持多语言(Java、Python、JS),提供原生镜像编译(Native Image)。
Zing 专为低延迟场景设计,无停顿垃圾回收(C4 算法)。

学习路线

在这里插入图片描述

1. 基础概念

  • 书籍:《深入理解 Java 虚拟机》(周志明)
  • 重点:JVM 内存结构、垃圾回收算法、类加载过程。

2. 工具实践

  • 监控工具jconsole, VisualVM, Arthas
  • 内存分析:使用 MAT(Memory Analyzer Tool) 分析堆转储文件。

3. 调优实战

  • 参数调优:堆大小、新生代/老年代比例(-XX:NewRatio)、选择 GC 算法。
  • 案例:解决 Full GC 频繁、Young GC 时间过长等问题。

4. 进阶学习

  • 源码研究:HotSpot 源码(如垃圾回收器实现)。
  • 新技术:学习 ZGC、Shenandoah 等低延迟 GC 的原理。


网站公告

今日签到

点亮在社区的每一天
去签到