首页 > 其他分享 >JVM 的组成

JVM 的组成

时间:2024-12-10 18:53:47浏览次数:5  
标签:Java 线程 内存 JVM 执行 组成 加载

JVM 的组成

JVM(Java Virtual Machine)是 Java 的核心组件,负责执行 Java 字节码程序。以下是 JVM 的主要组成部分:


1. 类加载子系统(Class Loader Subsystem)

  • 作用:负责加载 .class 文件到 JVM,将其转换为 JVM 能识别的内部数据结构。
  • 组成
    • Bootstrap ClassLoader(引导类加载器):加载 JDK 核心类库(rt.jar)。
    • Extension ClassLoader(扩展类加载器):加载扩展库(lib/ext 中的类)。
    • Application ClassLoader(应用类加载器):加载应用程序的类路径中的类。
  • 过程
    • 加载(Loading):通过文件、网络等方式加载 .class 文件。
    • 验证(Verification):确保字节码文件的合法性和安全性。
    • 准备(Preparation):为类的静态字段分配内存并赋默认值。
    • 解析(Resolution):将符号引用转换为直接引用。
    • 初始化(Initialization):执行类的静态代码块或初始化静态字段。

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

JVM 为执行 Java 程序分配的内存区域,包括以下部分:

a. 方法区(Method Area)

  • 存储
    • 类元信息(类名、方法名、字段名等)。
    • 静态变量。
    • 运行时常量池。
  • 特点
    • 是线程共享的。
    • 在 JDK 8 以前对应于永久代(PermGen),在 JDK 8 后改为元空间(Metaspace)。

b. 堆区(Heap Area)

  • 存储
    • 所有对象实例和数组。
  • 特点
    • 是线程共享的。
    • 垃圾回收(GC)主要针对堆区。
    • 通常分为年轻代(Young Generation)、老年代(Old Generation)和永久代(PermGen,JDK 8 以后移除)。

c. Java 栈区(Java Stack Area)

  • 存储
    • 方法调用的局部变量。
    • 每个方法调用对应一个栈帧(Frame)。
  • 特点
    • 是线程私有的。
    • 方法调用结束后,栈帧会弹出,内存自动回收。

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

  • 功能
    • 记录当前线程正在执行的字节码指令地址。
  • 特点
    • 是线程私有的。

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

  • 功能
    • 为本地方法(非 Java 方法,如通过 JNI 调用的 C 或 C++ 方法)服务。
  • 特点
    • 是线程私有的。

3. 执行引擎(Execution Engine)

  • 作用:负责执行字节码。
  • 组成
    • 解释器(Interpreter):逐条解释字节码并执行。
    • 即时编译器(JIT Compiler)
      • 热点代码(频繁执行的代码)会被 JIT 编译为机器码,以提高执行速度。
      • 包括 C1(Client Compiler,快速编译)和 C2(Server Compiler,高性能优化)。
    • 垃圾回收器(Garbage Collector,GC)
      • 自动回收不再使用的对象所占的内存。

4. 本地方法接口(Native Interface)

  • 作用:提供调用非 Java 代码(如 C、C++)的接口。
  • 工作机制
    • 通过 JNI(Java Native Interface)调用本地方法。
    • 实现与底层操作系统和硬件的交互,如文件系统、网络操作。

5. JVM 内存模型(Java Memory Model, JMM)

  • 作用:定义线程如何交互以及如何访问内存。
  • 主要内容
    • 主内存(Main Memory):所有线程共享的内存区域。
    • 工作内存(Working Memory):每个线程独立的内存区域,用于存储线程私有的数据。
    • 可见性:规定线程对共享变量的修改如何被其他线程看到。
    • 原子性:确保基本操作的不可分割性。
    • 有序性:保证程序的执行顺序符合预期。

6. JVM 垃圾回收子系统

  • 作用:自动管理内存,回收不再使用的对象。
  • 常用算法
    • 标记-清除算法。
    • 标记-压缩算法。
    • 复制算法。
    • 分代收集算法。
  • 常见垃圾回收器
    • Serial GC、Parallel GC、CMS、G1 GC、ZGC、Shenandoah 等。

JVM 的工作原理

  1. 加载类:通过类加载子系统加载 .class 文件。
  2. 分配内存:在堆、栈等区域分配对象和方法的内存。
  3. 执行字节码:通过执行引擎逐条解释或即时编译代码并运行。
  4. 垃圾回收:定期清理无用的对象,释放内存。

总结

JVM 的组成模块紧密协作,为 Java 程序提供了一个高效、安全、跨平台的运行环境。每个部分都有其特定功能,共同构成了完整的 JVM。

标签:Java,线程,内存,JVM,执行,组成,加载
From: https://www.cnblogs.com/eiffelzero/p/18597857

相关文章

  • JVM 的 TLAB(Thread-Local Allocation Buffer)是什么?
    JVM的TLAB(Thread-LocalAllocationBuffer)是什么?TLAB(Thread-LocalAllocationBuffer)简介TLAB(Thread-LocalAllocationBuffer)是JVM中堆内存管理的一种优化技术,用于减少多线程环境下对象分配的竞争,提高分配对象的效率。它为每个线程分配一块独立的小堆空间,专门用于分配新对......
  • 分布式锁有哪些实现方式?它们各自的优缺点是什么? JVM调优的基本步骤有哪些如何实现OAut
    本人详解作者:王文峰,参加过CSDN2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的Java开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯山峯转载说明:务必注明来源(注明:作者:王文峰哦)分布式锁有哪......
  • JVM 性能调优 -- Arthas
    前言:之前陆陆续续的分享了JDK自带的相关调优命令、图形化界面工具、第三方网站工具等,本篇我们分享一下Alibaba开源的工具Arthas。JVM系列文章传送门初识JVM(Java虚拟机)深入理解JVM(Java虚拟机)一文搞懂JVM垃圾回收(JVMGC)深入理解JVM垃圾回收算法一文搞懂......
  • 高级java每日一道面试题-2024年12月08日-JVM篇-什么是类加载器?
    如果有遗漏,评论区告诉我进行补充面试官:什么是类加载器?我回答:在Java高级面试中,类加载器(ClassLoader)是一个重要的概念,它涉及到Java类的加载和初始化机制。以下是对类加载器的详细解释:定义与作用类加载器是Java虚拟机(JVM)提供的一种机制,用于将Java类的字节码(.class文......
  • 高级java每日一道面试题-2024年12月07日-JVM篇-如何选择垃圾收集器?
    如果有遗漏,评论区告诉我进行补充面试官:如何选择垃圾收集器?我回答:在Java高级面试中,选择垃圾收集器(GarbageCollector,GC)是一个重要且常见的议题。选择合适的垃圾收集器对于优化应用程序的性能至关重要。以下是对如何选择垃圾收集器的详细解析:了解垃圾收集器的基本类......
  • 16-01、JVM系列之:内存与垃圾回收篇(一)
    JVM系列之:内存与垃圾回收篇(一)##本篇内容概述:1、JVM结构2、类加载子系统3、运行时数据区之:PC寄存器、Java栈、本地方法栈一、JVM与JAVA体系结构JAVA虚拟机与JAVA语言并没有必然的联系,它只是与特定的二进制文件格式:Class文件格式关联,Class文件中包含了JAVA虚拟机指令集......
  • 神经网络的定义,组成,工作原理及应用
    **神经网络(NeuralNetwork)**是一种受人类大脑启发的计算模型,是深度学习的核心构成。它模仿生物神经元之间的连接,能够通过大量数据的训练完成分类、回归、生成等任务。以下从概念、结构、工作原理和常见类型等方面详细解释神经网络。1.神经网络的定义神经网络是由多个**人工......
  • 库library的功能和组成_将库链接到可执行文件
    以下为与AI的聊天内容,记录以供复习以及空闲时阅读使用在软件开发中,库(library)是一组预编译的代码集合,可以被多个程序或模块共享和重用。库通常包含函数、类、数据结构和其他资源,开发者可以在自己的程序中调用这些库中的功能,而无需重新编写代码。库可以分为两种主要类型:静态库(S......
  • 深入理解JVM垃圾收集器与内存分配策略
    1.什么是垃圾?在Java虚拟机中,“垃圾”指的是内存中不再使用或不可达的对象。垃圾收集器(GC)的主要任务就是识别并回收这些垃圾对象,释放内存资源。在JVM中,垃圾收集器管理的是堆(Heap)和方法区(MethodArea)中的对象,它们的生命周期是动态的,需要在运行时进行分配和回收。2.对象是否已......
  • JVM, JRE 和 JDK
    JRE:JavaRuntimeEnvironment,Java运行环境.JDK:JavaDevelopmentKit,Java开发工具包.JRE=JVM+核心类库+运行工具JDK=JVM+核心类库+开发工具JVM:JavaVirtualMachine,Java虚拟机.核心类库:Java已经写好的东西,直接拿来用即可.开发工具:包括jav......