Java--JVM

Java 虚拟机(JVM)介绍

Java 虚拟机(Java Virtual Machine,JVM)是 Java 程序运行的核心组件,它是 Java 平台无关性的关键。JVM 负责将 Java 字节码转换为机器码并执行,同时管理内存、垃圾回收、线程等资源。


一、JVM 的作用

  1. 平台无关性

    • Java 程序编译后生成字节码(.class 文件),JVM 负责在不同平台上解释或编译字节码为机器码。
    • 实现“一次编写,到处运行”(Write Once, Run Anywhere)。
  2. 内存管理

    • JVM 管理堆、栈、方法区等内存区域,自动分配和回收内存。
    • 提供垃圾回收机制(Garbage Collection,GC),避免内存泄漏。
  3. 安全性

    • JVM 提供沙箱机制,限制 Java 程序的访问权限,防止恶意代码破坏系统。
  4. 性能优化

    • JVM 通过即时编译器(JIT)将热点代码编译为机器码,提高执行效率。

二、JVM 的架构

JVM 主要由以下部分组成:

1. 类加载器(Class Loader)

  • 负责加载 .class 文件到内存。
  • 分为三种类加载器:
    • Bootstrap ClassLoader:加载核心类库(如 java.lang.*)。
    • Extension ClassLoader:加载扩展类库(如 javax.*)。
    • Application ClassLoader:加载用户自定义类。

2. 运行时数据区(Runtime Data Areas)

  • 方法区(Method Area)
    • 存储类信息、常量、静态变量等。
    • JDK 8 之前称为永久代(PermGen),JDK 8 及之后称为元空间(Metaspace)。
  • 堆(Heap)
    • 存储对象实例和数组。
    • 分为新生代(Young Generation)和老年代(Old Generation)。
  • 栈(Stack)
    • 存储方法调用的局部变量、操作数栈、动态链接等。
    • 每个线程有独立的栈。
  • 程序计数器(Program Counter Register)
    • 记录当前线程执行的字节码指令地址。
  • 本地方法栈(Native Method Stack)
    • 用于执行本地方法(Native Method)。

3. 执行引擎(Execution Engine)

  • 解释器:逐行解释字节码并执行。
  • 即时编译器(JIT):将热点代码编译为机器码,提高执行效率。
  • 垃圾回收器(Garbage Collector):管理堆内存,回收无用对象。

4. 本地方法接口(JNI)

  • 提供调用本地方法(如 C/C++ 代码)的接口。

三、JVM 的内存模型

1. 堆(Heap)

  • 新生代(Young Generation)
    • 分为 Eden 区和两个 Survivor 区(S0 和 S1)。
    • 使用复制算法进行垃圾回收。
  • 老年代(Old Generation)
    • 存储长期存活的对象。
    • 使用标记-清除或标记-整理算法进行垃圾回收。

2. 方法区(Method Area)

  • 存储类信息、常量、静态变量等。
  • JDK 8 之前称为永久代(PermGen),JDK 8 及之后称为元空间(Metaspace)。

3. 栈(Stack)

  • 每个线程有独立的栈,存储方法调用的局部变量、操作数栈、动态链接等。

4. 程序计数器(Program Counter Register)

  • 记录当前线程执行的字节码指令地址。

5. 本地方法栈(Native Method Stack)

  • 用于执行本地方法(Native Method)。

四、垃圾回收(GC)

1. GC 的类型

  • Minor GC:清理新生代。
  • Major GC:清理老年代。
  • Full GC:清理整个堆和方法区。

2. GC 算法

  • 复制算法:用于新生代,将存活对象复制到 Survivor 区。
  • 标记-清除算法:用于老年代,标记无用对象并清除。
  • 标记-整理算法:用于老年代,标记无用对象并整理内存。

3. 常见的垃圾回收器

  • Serial GC:单线程垃圾回收器,适用于小型应用。
  • Parallel GC:多线程垃圾回收器,适用于多核服务器。
  • CMS GC:并发标记清除垃圾回收器,适用于对延迟敏感的应用。
  • G1 GC:适用于大内存、低延迟的应用。
  • ZGC:适用于超大堆内存(TB 级别)和超低延迟(毫秒级)的场景。

五、JVM 调优

1. 调优目标

  • 提高应用的吞吐量(Throughput)。
  • 降低应用的延迟(Latency)。
  • 减少 Full GC 的频率和时间。

2. 常用 JVM 参数

  • -Xms:初始堆大小。
  • -Xmx:最大堆大小。
  • -Xmn:新生代大小。
  • -XX:MetaspaceSize:元空间初始大小。
  • -XX:MaxMetaspaceSize:元空间最大大小。
  • -XX:+UseG1GC:使用 G1 垃圾回收器。
  • -XX:+PrintGCDetails:打印 GC 详细信息。

3. 调优案例

  • 高吞吐量应用
    -Xms2048m -Xmx2048m -Xmn1024m -XX:+UseParallelGC
    
  • 低延迟应用
    -Xms2048m -Xmx2048m -Xmn512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200
    

六、总结

JVM 是 Java 程序运行的核心组件,负责字节码的执行、内存管理、垃圾回收等任务。通过理解 JVM 的架构和内存模型,可以更好地优化 Java 应用的性能。以下是 JVM 的核心要点:

  1. 类加载器:加载 .class 文件。
  2. 运行时数据区:包括堆、栈、方法区等。
  3. 垃圾回收:管理堆内存,回收无用对象。
  4. 调优:通过调整 JVM 参数优化性能。

掌握 JVM 的原理和调优方法,可以帮助你编写高效、稳定的 Java 程序。

以上内容来自于deepseek.

posted @   shog808  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2022-02-21 Java中的泛型
2020-02-21 shell脚本自动化部署
点击右上角即可分享
微信分享提示