java 模拟试卷
JAVA JVM基础与内存模型专题测试
本试卷涵盖以下核心知识点:
JVM概述与跨平台原理(5题)
- JVM实现Java跨平台的原理
- JVM的主要功能(字节码转换为机器码执行)
- JVM本身是平台相关的,不是跨平台
- Java源文件编译生成.class字节码文件
- JIT编译器将热点代码编译成本地机器码
- JDK、JRE、JVM的关系(JDK ⊃ JRE ⊃ JVM)
JVM内存结构(堆、栈、方法区等)(5题)
- JVM运行时数据区五大区域:堆、虚拟机栈、方法区、本地方法栈、程序计数器
- 堆内存是所有线程共享的,存储对象实例
- 虚拟机栈存储方法调用栈帧和局部变量,线程私有
- 方法区存储类信息、常量、静态变量,线程共享
- JDK 8用元空间取代永久代实现方法区
- 程序计数器记录当前执行字节码指令位置
对象创建与内存分配(4题)
- 对象创建流程:加载类 → 分配内存 → 初始化零值 → 设置对象头 → 执行构造方法
- 对象的成员变量存储在堆中,局部变量存储在栈中
- 静态变量存储在方法区中
- 对象内存分配方式:指针碰撞和空闲列表
垃圾回收机制与算法(5题)
- 引用计数法无法解决循环引用问题
- JVM使用可达性分析算法判断对象存活
- GC Roots包括栈中引用变量、静态变量等
- 垃圾回收算法:标记-清除、标记-整理、复制算法
- 标记-整理算法消除内存碎片问题
- Minor GC、Major GC、Full GC、Mixed GC的区别
- Parallel Scavenge收集器关注吞吐量
类加载机制与双亲委派模型(5题)
- JVM类加载器层级:Bootstrap、Extension、Application、自定义加载器
- Bootstrap ClassLoader是最顶层的类加载器
- Application ClassLoader加载classpath下的用户类
- 双亲委派模型的工作原理
- 类的唯一性由类名和ClassLoader共同决定
- 打破双亲委派的场景(Tomcat、SPI、OSGi)
- 类加载器之间是组合关系而非继承关系
试卷习题(20 题)
参考答案在文末判断题
1
判断题
JVM使用可达性分析算法判断对象存活,GC Roots包括虚拟机栈中的引用变量和方法区中的静态变量。
2
判断题
Java堆内存是所有线程共享的内存区域,用于存储对象实例。
3
判断题
Java程序能够"一次编写,到处运行"的根本原因是JVM的存在。
4
判断题
引用计数法是一种简单有效的垃圾回收算法,可以正确回收所有不可达对象。
5
判断题
对象的成员变量存储在堆内存中的对象实例里,而局部变量存储在栈内存中。
6
判断题
JVM本身是跨平台的,同一份JVM程序可以在不同操作系统上运行。
单选题
7
单选题
方法内的局部变量存储在哪个内存区域?
8
单选题
标记-整理(Mark-Compact)算法相比标记-清除算法的主要改进是什么?
9
单选题
以下哪个场景通常需要打破双亲委派模型?
10
单选题
关于JDK 8中方法区的变化,以下说法正确的是?
11
单选题
类的静态变量存储在哪个内存区域?
12
单选题
Java中创建一个对象的主要流程是?
13
单选题
关于JVM的执行方式,以下说法正确的是?
14
单选题
JVM中最顶层的类加载器是?
15
单选题
Java源文件经过编译后生成的是什么文件?
16
单选题
JVM的主要功能是什么?
多选题
17
多选题
以下关于JDK、JRE、JVM关系的描述,正确的有哪些?
18
多选题
关于Parallel Scavenge垃圾收集器,以下说法正确的有哪些?
填空题
19
填空题
JVM创建对象时,首先在堆中,然后将内存空间,接着设置信息,最后执行构造方法完成初始化。
20
填空题
根据JVM规范,运行时数据区主要包括:、、、本地方法栈、程序计数器。
参考答案
1.正确
2.正确
3.正确
4.错误
5.正确
6.错误
7.B
8.C
9.C
10.B
11.C
12.A
13.C
14.C
15.B
16.B
17.A;B;C
18.A;B;C;D
19.分配内存;初始化为零值;对象头
20.堆;虚拟机栈;方法区
