【大白话说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编译器的作用是什么?"
    答:将频繁执行的代码编译为机器码,提升程序运行效率。
相关推荐
用户1069117941012 小时前
SpringSercuirty整合jwt
后端
yngsqq12 小时前
窗体快速取消
java·开发语言
岁月如歌778612 小时前
一次讲透 Redis 缓存击穿、穿透、雪崩,从原理到实战解决方案
java·后端·架构
IT_陈寒12 小时前
Vue的v-for为啥把我的渲染顺序搞乱套了?
前端·人工智能·后端
用户1069117941012 小时前
SpringSecuirty自定义接口或者资源权限
后端
XiaQ091912 小时前
Linux 常用命令学习笔记(用户管理篇):用户、组与权限的钥匙
linux·开发语言·笔记·学习
不可求~12 小时前
C++ 报错交给 AI 之前,先准备好这 8 类信息
开发语言·c++·人工智能
小的~~12 小时前
面试被问懵了?为什么 Redis 单线程还能保证 Lua 脚本原子性,却偏偏选了 Lua?
redis·面试·lua
名字还没想好☜12 小时前
用 Python struct 解析二进制协议:pack/unpack、字节序与对齐踩坑
开发语言·python·二进制·struct
AI多Agent协作实战派13 小时前
AI多Agent协作系统实战(四十六):改了十次规则,AI员工还是老样子——会话缓存的坑
java·spring·缓存