Java 面试:JVM 常问问题解答

本文以问答形式解答 Java 面试中常见的 JVM 相关问题,涵盖 JVM 的组成部分、内存模型、垃圾回收机制、类加载器等重要概念。

1. 什么是 JVM?

JVM (Java 虚拟机) 是 Java 程序的运行环境,它可以在不同的操作系统上运行 Java 程序。它是一个虚拟的计算机,可以解释 Java 字节码并执行 Java 程序。

2. JVM 有哪些组成部分?

JVM 由三个主要的组成部分组成:类加载器、运行时数据区和执行引擎。

  • 类加载器 负责加载 Java 类文件。
  • 运行时数据区 负责存储 Java 程序执行时的数据,包括:
    • 方法区:存储类信息、常量池、静态变量、即时编译器编译后的代码等。在 JDK8 之前称为永久代,JDK8 中被元空间取代。
    • :存储 Java 对象。
    • 虚拟机栈:每个线程都有一个独立的虚拟机栈,用于存储方法的局部变量、参数和方法调用状态。
    • 本地方法栈:用于支持 native 方法调用。
    • 程序计数器:记录当前线程执行的字节码指令地址。
  • 执行引擎 负责解释 Java 字节码并执行 Java 程序。

3. 什么是 Java 堆?

Java 堆是 JVM 中的一种运行时数据区,用于存储 Java 对象。在 Java 程序中,所有的对象都是在 Java 堆中分配的。Java 堆可以通过 '-Xmx' 和 '-Xms' 参数来设置最大和最小堆大小。

4. 什么是 Java 栈?

Java 栈是 JVM 中的一种运行时数据区,用于存储 Java 方法的局部变量、方法参数和方法调用的状态。每个线程都有一个独立的 Java 栈,用于存储该线程执行的方法的状态。

5. 什么是 Java 方法区?

Java 方法区是 JVM 中的一种运行时数据区,用于存储类信息、常量、静态变量、即时编译器编译后的代码等。在 Java 程序中,所有的类都是在 Java 方法区中加载和存储的。

6. 什么是垃圾回收?

垃圾回收是 JVM 中的一种机制,用于回收不再使用的 Java 对象。在 Java 程序中,当一个对象不再被引用时,它就成为了垃圾。垃圾回收器会定期扫描 Java 堆中的对象,将不再被引用的对象标记为垃圾,并回收它们所占用的内存。

7. 什么是永久代?

永久代是 JVM 中的一种特殊的运行时数据区,用于存储类的元数据、常量池和静态变量。在 JDK8 之前,永久代是 JVM 中的一个独立的区域,但在 JDK8 中被移除,被元空间所替代。

8. 什么是元空间?

元空间是 JVM 中的一种运行时数据区,用于存储类的元数据。在 JDK8 中,元空间取代了永久代。元空间的大小可以通过 '-XX:MetaspaceSize' 和 '-XX:MaxMetaspaceSize' 参数来设置。

9. 什么是 JIT 编译器?

JIT (Just-In-Time) 编译器是 JVM 中的一种编译器,用于将 Java 字节码转换为本地机器代码。JIT 编译器会在 Java 程序运行时动态编译 Java 字节码,以提高 Java 程序的执行性能。

10. 什么是类加载器?

类加载器是 JVM 中的一种组件,用于加载 Java 类。当 Java 程序运行时,类加载器会根据类的全限定名查找相应的类文件,并将其加载到 JVM 中。JVM 中有三种类型的类加载器:

  • 启动类加载器:加载核心 Java 库。
  • 扩展类加载器:加载扩展 Java 库。
  • 应用程序类加载器:加载用户自定义的类。
Java 面试:JVM 常问问题解答

原文地址: https://www.cveoy.top/t/topic/mGUW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录