【大白话说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编译器的作用是什么?"
    答:将频繁执行的代码编译为机器码,提升程序运行效率。
相关推荐
Moshow郑锴2 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
weixin_307779135 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
丑陋小蚊子5 小时前
项目数据不能公开,就写清交付物
面试·求职招聘·大学生·简历·简历下载
一水鉴天8 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel8 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_949950639 小时前
练题簿在线免费刷题 从资料整理到考前自测
面试·职场和发展·pdf·word·刷题
2601_962071579 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境10 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
\光辉岁月/10 小时前
5.java-数组
java·开发语言