【大白话说Java面试题 第41题】【JVM篇】第1题:JVM由哪些部分组成?

📌 PDF :大白话说Java面试题 --- 02-JVM篇

第1题:JVM由哪些部分组成?

📚 回答:

  • 核心组成
    JVM(Java虚拟机)主要由三大部分组成:类装载子系统运行时数据区字节码执行引擎 。它们各司其职,共同协作完成Java程序的加载、存储和执行。

1. 类装载子系统
  • 功能

    • 负责将.class文件加载到JVM中,并进行验证、准备、解析和初始化。
    • 主要包括以下步骤:
      • 加载:通过类加载器(如启动类加载器、扩展类加载器、应用程序类加载器)将字节码文件加载到内存。
      • 链接:分为验证、准备和解析三个阶段,确保类的正确性和完整性。
      • 初始化:为静态变量赋值并执行静态代码块。
  • 类加载器机制

    • 双亲委派模型:类加载器优先委托父类加载器加载类,只有当父类加载器无法加载时,才会尝试自己加载。

    💡 代码示例

    以下代码展示了类加载的过程:

java 复制代码
public class ClassLoaderDemo {
    public static void main(String[] args) {
        System.out.println("Class loaded by: " + ClassLoaderDemo.class.getClassLoader());
    }
}

2. 运行时数据区
  • 定义
    • 运行时数据区是JVM的内存模型,负责存储Java程序运行过程中所需的各种数据。
    • 包括以下五个部分:
      • :线程共享,用于存放对象实例和数组。
      • 元空间:线程共享,用于存储类元信息、常量池、静态变量等。
      • 虚拟机栈:线程私有,用于存储方法调用过程中的局部变量表、操作数栈等。
      • 本地方法栈:线程私有,用于支持本地方法(Native Method)的调用。
      • 程序计数器:线程私有,用于记录当前线程执行的字节码指令地址。

3. 字节码执行引擎
  • 功能
    • 负责解释或编译执行运行时数据区中的字节码指令。

    • 支持两种执行方式:

      • 解释执行:逐条解释字节码指令并执行。
      • 即时编译(JIT):将热点代码编译为机器码以提高执行效率。

      💡 面试官视角

  • 面试官可能会问"类加载器的双亲委派模型有什么作用?"
    答:避免类的重复加载,保证核心类库的安全性(如防止自定义类覆盖 java.lang.String)。
  • 面试官可能会追问"JIT编译器的作用是什么?"
    答:将频繁执行的代码编译为机器码,提升程序运行效率。
相关推荐
葫芦和十三3 小时前
图解 MongoDB 02|BSON:你以为存的是 JSON,其实是带类型的二进制
后端·mongodb·agent
葫芦和十三3 小时前
图解 MongoDB 01|文档数据库
后端·mongodb·agent
JieE2124 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
陈随易6 小时前
VSCode的Copilot扩展支持接入DeepSeek,Kimi了!
前端·后端·程序员
我不是外星人7 小时前
有了 Harness Engineering ,真的还需要研发工程师吗?
前端·后端·ai编程
candyTong7 小时前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
Rust研习社9 小时前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
IT_陈寒10 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
CaffeinePro10 小时前
Pydantic深度使用:数据校验、枚举、ORM映射
后端·fastapi
Chenyiax11 小时前
从 Chat 到 Responses:OpenAI API 抽象为什么变了?
后端