【大白话说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编译器的作用是什么?"
    答:将频繁执行的代码编译为机器码,提升程序运行效率。
相关推荐
小小代码狗7 分钟前
PHP 常用函数与变量参考文档
开发语言·安全·php
一水24 分钟前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
编程阿峰30 分钟前
Python 环境配置(二)安装jupyter、matplotlib、numpy库
开发语言·python·jupyter·numpy·matplotlib
AC赳赳老秦30 分钟前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
磁爆步兵1 小时前
内存分区:程序运行的核心秘密
java·开发语言·jvm
此生决int1 小时前
深入理解C++系列(06)——模版初阶与STL
开发语言·c++
用户2873555325922 小时前
OpenResty 中 Lua 脚本实战示例(分场景讲清 Lua 解决了 Nginx 原生做不到的事)
面试
流星白龙2 小时前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题 第207题】【09_Zookeeper篇】第8题:谈谈 ZooKeeper 的可靠性保障机制
java·zookeeper·高可用·可靠性·分布式系统
swany2 小时前
同步数据中,只需要几秒钟 & milvus向量数据库不可用 dify1.16.1 升级后踩坑记录
开发语言·python·numpy