全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 20 道配套习题

JVM基础与内存模型专题

专题说明

本专题系统讲解Java虚拟机的核心知识点,JVM是Java程序的运行基础,理解JVM内存结构、垃圾回收、类加载机制是高级开发者的必备技能,也是性能调优的理论基础。

学习目标

  1. 理解JVM的跨平台原理与JIT编译机制
  2. 掌握JVM运行时数据区的组成与各区域作用
  3. 理解对象创建流程与内存分配策略
  4. 掌握垃圾回收算法与常见GC收集器特点
  5. 理解类加载机制与双亲委派模型
  6. 了解打破双亲委派的应用场景

学习内容

本专题涵盖五大核心知识点:

知识点核心内容
JVM概述与跨平台原理字节码、JIT编译、JVM/JRE/JDK关系
JVM内存结构堆、栈、方法区、程序计数器、本地方法栈
对象创建与内存分配创建流程、TLAB、逃逸分析、栈上分配
垃圾回收机制与算法引用计数、可达性分析、标记清除/复制/整理、分代收集
类加载机制与双亲委派加载过程、三层类加载器、双亲委派、SPI机制

学习建议

  1. 理解内存模型:堆是对象存储区域,栈是方法执行区域,方法区存储类信息
  2. 掌握GC算法:新生代用复制算法,老年代用标记清除或标记整理
  3. 理解类加载:双亲委派保证类唯一性,但Tomcat、SPI等需要打破
  4. 结合调优实践:理解JVM是性能调优的基础,建议结合实际案例学习

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
判断题

Java程序能够"一次编写,到处运行"的根本原因是JVM的存在。

A

B

2
单选题

JVM的主要功能是什么?

A

将Java源代码编译成字节码

B

将字节码解释或编译成机器码执行

C

管理操作系统的硬件资源

D

提供Java API类库

3
单选题

关于JVM的执行方式,以下说法正确的是?

A

JVM只能解释执行字节码,不能编译执行

B

JIT编译器会将所有字节码一次性编译成机器码

C

JIT编译器在运行时将热点代码编译成本地机器码以提高性能

D

JVM执行Java程序的性能永远不如C++等编译型语言

4
判断题

Java堆内存是所有线程共享的内存区域,用于存储对象实例。

A

B

5
单选题

JVM中存储类信息、常量、静态变量的内存区域是?

A

B

虚拟机栈

C

方法区

D

本地方法栈

6
单选题

关于JDK 8中方法区的变化,以下说法正确的是?

A

方法区被完全移除,不再存在

B

永久代被元空间取代,元空间使用本地内存

C

方法区仍然在JVM内存中,只是改名为元空间

D

类信息直接存储在堆内存中

7
多选题

关于JVM堆内存的结构划分,以下说法正确的有哪些?

A

堆内存分为新生代和老年代两部分

B

新生代一般占堆内存的1/3左右

C

新生代分为Eden区、Survivor From区、Survivor To区

D

大对象可能直接分配到老年代

8
单选题

Java中创建一个对象的主要流程是?

A

加载类 → 分配内存 → 初始化对象 → 设置引用

B

分配内存 → 加载类 → 初始化对象 → 设置引用

C

初始化对象 → 分配内存 → 加载类 → 设置引用

D

设置引用 → 加载类 → 分配内存 → 初始化对象

9
单选题

关于JVM的对象内存分配优化,以下说法正确的是?

A

所有对象必须分配在堆内存中

B

逃逸分析技术可以让某些对象在栈上分配

C

标量替换会将对象拆解为多个局部变量

D

栈上分配的对象不会被垃圾回收

10
判断题

引用计数法是一种简单有效的垃圾回收算法,可以正确回收所有不可达对象。

A

B

11
单选题

标记-清除(Mark-Sweep)垃圾回收算法的主要缺点是什么?

A

执行效率低

B

产生内存碎片

C

需要暂停所有线程

D

无法回收大对象

12
单选题

标记-整理(Mark-Compact)算法相比标记-清除算法的主要改进是什么?

A

提高了标记效率

B

减少了GC暂停时间

C

将存活对象整理到一端,消除内存碎片

D

不需要暂停用户线程

13
单选题

关于CMS(Concurrent Mark Sweep)垃圾收集器,以下说法正确的是?

A

CMS是新生代收集器,使用复制算法

B

CMS追求最短的垃圾收集暂停时间,使用标记-清除算法

C

CMS收集过程完全不需要暂停用户线程

D

CMS是JDK 9之后的默认垃圾收集器

14
判断题

JVM类加载过程包括加载、验证、准备、解析、初始化五个阶段,这些阶段是按顺序依次执行的。

A

B

15
单选题

JVM中最顶层的类加载器是?

A

Extension ClassLoader

B

Application ClassLoader

C

Bootstrap ClassLoader

D

Custom ClassLoader

16
单选题

在类加载的准备阶段,JVM对静态变量做了什么处理?

A

执行静态变量的显式初始化代码

B

为静态变量分配内存空间并设置初始零值

C

将静态变量的符号引用替换为直接引用

D

执行静态代码块中的代码

17
单选题

双亲委派模型的主要好处不包括以下哪项?

A

保证核心类库的安全性,防止被恶意替换

B

保证类的唯一性,避免重复加载

C

保证类的加载顺序符合层级关系

D

提高类加载的性能,减少加载时间

18
多选题

关于JVM类加载器的层级关系,以下说法正确的有哪些?

A

Bootstrap ClassLoader是最顶层的加载器,加载核心类库

B

Extension ClassLoader的父加载器是Bootstrap ClassLoader

C

Application ClassLoader的父加载器是Extension ClassLoader

D

各加载器之间是组合关系而非继承关系

19
多选题

关于Java SPI机制打破双亲委派模型,以下说法正确的有哪些?

A

SPI接口定义在核心库(java.sql.Driver),由Bootstrap ClassLoader加载

B

SPI实现类在ClassPath,Bootstrap ClassLoader无法加载

C

使用线程上下文类加载器(ContextClassLoader)加载实现类

D

JDBC驱动加载是SPI打破双亲委派的典型例子

20
填空题

JVM类加载过程包括:______阶段查找并读取类文件,______阶段确保字节码正确,______阶段为静态变量分配内存并设零值,______阶段将符号引用转为直接引用,______阶段执行类初始化代码。

← 上一个专题 IO与NIO深入专题
下一个专题 → 反射与注解专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库