网站首页

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

JVM的组成部分

时间:2025-09-02 20:34

人气:

作者:admin

标签:

导读:Java Virtual Machine(Java 虚拟机),可以把它理解成一个 虚拟的计算机—— 它不是真实的硬件设备,而是一段能运行 Java 字节码的程序。...

我们先说说 JVM 是什么,Java Virtual Machine(Java 虚拟机)。我们可以把它理解成一个 "虚拟的计算机" —— 它不是真实的硬件设备,而是一段能运行 Java 字节码的程序。

如果 Java 代码是 "世界通用的食谱",那么 JVM 就是 "能看懂这份食谱的厨师"。不管是用 Windows 、Mac 还是 Linux,只要安装了对应平台的 JVM,就能把同一份 Java 字节码(.class 文件)"做" 出同样的效果。这也是 Java 能实现 "一次编写,到处运行Write Once, Run Anywhere)" 的核心秘密。

1、类加载子系统(ClassLoader Subsystem)

        (1) 定义:负责把 .class 文件加载到 JVM 内存中。

        (2) 主要步骤:

                 加载(Loading):从文件系统或网络中找到 class 文件,读进内存。

                 链接(Linking):验证(字节码是否安全)、准备(为类变量分配内存并设置默认值)、解析(将符号引用转为直接引用)。

                 初始化(Initialization):执行类变量的赋值操作和静态代码块。

        (3) 主要的类加载器:启动类加载器(Bootstrap)、扩展类加载器(Extension)、应用类加载器(Application)。

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

        JVM 在 运行 Java 程序时使用的内存区域,可以分为:

        (1) 方法区(Method Area)

                ① 存储类相关信息(类的结构、方法、字段、常量池)。

                ② 在 HotSpot JVM 中,早期叫 永久代(PermGen),后期改为 元空间(Metaspace)

        (2) 堆(Heap)

                ① 存放所有对象实例。

                ② 是垃圾回收器(GC)的主要工作区域。

                ③ 通常分为 新生代(Young Generation)老年代(Old Generation)

        (3) Java 虚拟机栈(JVM Stack)

                ① 每个线程启动时都会创建一个栈。

                ② 用来存储方法调用时的 局部变量、操作数栈、返回地址 等信息。

                ③ 每次方法调用就是一个 栈帧

        (4) 本地方法栈(Native Method Stack)

                ① 与 JVM Stack 类似,但服务于 本地方法(Native Method)

                ② 通常是用 C/C++ 实现的。

        (5) 程序计数器(Program Counter, PC Register)

                ① 每个线程都有一个独立的程序计数器。

                ② 保存当前线程正在执行的字节码的地址。

3、执行引擎(Execution Engine)

        (1) 负责把字节码 解释/编译 为机器指令,交给底层操作系统执行。

        (2) 主要包括:

                ① 解释器:逐行解释执行字节码。

                ② JIT 编译器(Just-In-Time Compiler):将热点代码编译成本地机器码,提高执行效率。

                ③ 即时编译优化组件:对热点代码进行优化,例如方法内联、循环展开等。

4、本地方法接口(JNI, Java Native Interface)

        (1) 提供 Java 调用其他语言(如 C、C++)库的能力。

        (2) 通过 JNI,可以让 Java 程序访问底层操作系统或硬件功能。

我看有网友问 垃圾回收器 算不算JVM的一部分呢?垃圾回收 并不是 JVM 的 "组成模块",而是 JVM 的一项功能。不同 JVM 提供了不同的 GC 实现,比如 CMS、G1、ZGC 等。

真正的强者,不是不失败,而是善于从失败中吸取教训。-- 烟沙九洲

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信