【大白话说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编译器的作用是什么?"
    答:将频繁执行的代码编译为机器码,提升程序运行效率。
相关推荐
tryxr18 分钟前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei21 分钟前
Java 写 Agent:模型只是组件
java·开发语言
考虑考虑29 分钟前
docker compose环境变量替换
运维·后端·自动化运维
小玮看世界1 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
彧azz1 小时前
Java学习语法篇:变量
java·学习
武雄(小星Ai)1 小时前
飞书API上传26MB文件偶发失败:错误码9499与空响应体排坑实录
后端·api·排坑实录
徐小夕2 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
繁星蓝雨2 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J2 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
杜大哥2 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python