JVM 实战 - JVM的架构模子

打印 上一主题 下一主题

主题 523|帖子 523|积分 1573

Java Virtual Machine (JVM) 的架构模子是为了确保 Java 程序能够跨平台运行,并且具有高性能、安全性和可移植性。JVM 的架构模子紧张分为几个关键部门:类加载子系统、运行时数据区、实行引擎以及本地接口。下面我们将详细介绍这些部门以及它们如何协同工作。
1. 类加载子系统 (Class Loader Subsystem)

类加载子系统负责将类加载到 JVM 中,并且确保类的正确性。类加载器通常遵循双亲委派模子,这意味着每个类加载器在加载类之前会先委托给父加载器去完成加载使命。假如父加载器无法加载该类,则子加载器才会实验加载。


  • 启动类加载器 (Bootstrap Class Loader):负责加载 JVM 自带的核心类库(如 java.lang 包中的类)。
  • 扩展类加载器 (Extension Class Loader):负责加载位于扩展目录(通常是 $JAVA_HOME/jre/lib/ext)下的类库。
  • 应用类加载器 (Application Class Loader):也称为系统类加载器,负责加载用户应用的类路径(classpath)上的类。
2. 运行时数据区 (Runtime Data Area)

运行时数据区是 JVM 在运行时用来存储数据的地方。它被划分为几个不同的部门:


  • 方法区 (Method Area):用于存放类信息、常量、静态变量、即时编译后的代码等数据。方法区不是垃圾回收的紧张目的地区,但在某些情况下也会发生回收举动。
  • 堆 (Heap):用于存放对象实例和数组。这是垃圾回收器管理的紧张地区。

    • 新生代 (Young Generation):新创建的对象起首放在新生代中。新生代又可以进一步划分为 Eden 空间和两个 Survivor 空间(S0 和 S1)。
    • 老年代 (Old Generation):颠末多次垃圾回收后仍旧存活的对象会被移动到这里。

  • 程序计数器 (Program Counter Register):当火线程所实行的字节码指令地点。
  • Java 虚拟机栈 (Java Virtual Machine Stack):每个线程都有一个独立的栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
  • 本地方法栈 (Native Method Stack):类似于 Java 虚拟机栈,但用于存储原生方法调用的信息。
3. 实行引擎 (Execution Engine)

实行引擎是 JVM 的核心组件之一,它负责解释和实行字节码。它紧张包括:


  • 解释器 (Interpreter):逐条解释实行字节码。
  • 即时编译器 (Just-In-Time Compiler, JIT):将热点代码编译本钱地机器码,以提高性能。JIT 编译器可以根据运行时的性能数据来决定哪些代码段应该被编译。
  • 垃圾回收器 (Garbage Collector, GC):自动管理内存,回收不再使用的对象所占的内存空间。垃圾回收器有多种算法,例如 Serial、Parallel、Concurrent Mark Sweep (CMS)、G1 和 ZGC 等。
4. 本地接口 (Native Interface)

本地接口提供了与本地系统(操作系统、硬件等)交互的途径。例如,通过本地方法栈调用本地方法,这使得 Java 程序能够利用原生系统提供的功能。
总结

JVM 的架构模子可以总结如下:

  • 类加载子系统:负责加载和验证 Java 类。
  • 运行时数据区:包含方法区、堆、程序计数器、虚拟机栈和本地方法栈。
  • 实行引擎:解释实行字节码或编译热点代码为机器码。
  • 本地接口:提供与本地系统交互的能力。
这些组件共同协作,确保 Java 程序能够在不同平台上高效稳定地运行。假如你必要更深入地了解某个特定方面,请告诉我,我会提供更详细的解释。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表