资源描述
2025年jvm面试题及答案
一、单项选择题(总共10题,每题2分)
1. 以下关于JVM内存区域的说法,正确的是( )
A. 程序计数器是线程私有的
B. 虚拟机栈是线程私有的
C. 本地方法栈是线程私有的
D. 以上都是
答案:D
解析:程序计数器、虚拟机栈、本地方法栈都是线程私有的,每个线程都有自己独立的这些区域。
2. 以下哪种垃圾收集器是单线程的( )
A. Serial
B. ParNew
C. Parallel Scavenge
D. CMS
答案:A
解析:Serial收集器是最基本、历史最悠久的垃圾收集器,它是单线程的,进行垃圾收集时会暂停所有的用户线程。
3. 当一个对象的引用计数为0时,它会被( )
A. 标记清除
B. 标记整理
C. 复制算法
D. 回收
答案:D
解析:引用计数法中,当对象的引用计数为0时,就意味着该对象不再被任何地方引用,会被回收。
4. 以下哪个是Java堆的主要作用( )
A. 存放对象实例
B. 执行程序代码
C. 存储线程上下文
D. 存放编译后的字节码
答案:A
解析:Java堆是Java虚拟机所管理的内存中最大的一块,主要用于存放对象实例。
5. 方法区在JDK 8中被替换为( )
A. 永久代
B. 元空间
C. 堆空间
D. 栈空间
答案:B
解析:JDK 8中,方法区被元空间取代,元空间使用的是本地内存。
6. 以下哪种情况会导致对象进入老年代( )
A. 经过多次Minor GC仍然存活
B. 直接分配大对象
C. 以上都是
D. 都不是
答案:C
解析:对象在新生代经历多次Minor GC仍然存活会晋升到老年代,直接分配大对象也可能直接进入老年代。
7. JVM的类加载器不包括以下哪种( )
A. 启动类加载器
B. 扩展类加载器
C. 应用类加载器
D. 用户自定义类加载器
答案:D
解析:JVM的类加载器包括启动类加载器、扩展类加载器、应用类加载器,用户自定义类加载器是可以由开发者自己定义的。
8. 以下关于HotSpot虚拟机的说法,错误的是( )
A. 它是Java语言的默认虚拟机
B. 采用解释器与编译器并存的架构
C. 不支持动态编译
D. 有自己的即时编译器
答案:C
解析:HotSpot虚拟机采用解释器与编译器并存的架构,支持动态编译。
9. 以下哪种垃圾收集算法适用于老年代( )
A. 标记清除算法
B. 标记整理算法
C. 复制算法
D. 以上都不适用于老年代
答案:B
解析:标记整理算法适用于老年代,它在标记出存活对象后,将所有存活对象向一端移动,然后直接清理掉端边界以外的内存。
10. 当一个Java类被加载时,以下哪个步骤是最后执行的( )
A. 加载
B. 验证
C. 解析
D. 初始化
答案:D
解析:类加载的过程包括加载、验证、解析、初始化,初始化是最后一步。
二、多项选择题(总共10题,每题2分)
1. 以下哪些属于JVM的垃圾收集器( )
A. Serial
B. Parallel Scavenge
C. CMS
D. G1
答案:ABCD
解析:Serial、Parallel Scavenge、CMS、G1都是JVM的垃圾收集器。
2. 以下关于Java堆内存分配的说法,正确的有( )
A. 对象优先在Eden区分配
B. 大对象直接进入老年代
C. 长期存活的对象进入老年代
D. 当Eden区满时会触发Minor GC
答案:ABCD
解析:对象优先在Eden区分配,大对象直接进入老年代,长期存活的对象进入老年代,当Eden区满时会触发Minor GC。
3. 以下哪些是JVM内存区域( )
A. 程序计数器
B. 虚拟机栈
C. 本地方法栈
D. 堆
答案:ABCD
解析:程序计数器、虚拟机栈、本地方法栈、堆都是JVM内存区域。
4. 以下关于类加载机制的说法,正确的有( )
A. 双亲委派模型保证了类的加载顺序
B. 类加载过程包括加载、验证、解析、初始化
C. 自定义类加载器可以打破双亲委派模型
D. 启动类加载器负责加载核心类库
答案:ABCD
解析:双亲委派模型保证了类的加载顺序,类加载过程包括加载、验证、解析、初始化,自定义类加载器可以打破双亲委派模型,启动类加载器负责加载核心类库。
5. 以下哪些情况会触发Full GC( )
A. 老年代空间不足
B. 永久代空间不足(JDK 8之前)
C. 元空间空间不足(JDK 8之后)
D. 新生代空间不足
答案:ABC
解析:老年代空间不足、永久代空间不足(JDK 8之前)、元空间空间不足(JDK 8之后)会触发Full GC,新生代空间不足触发Minor GC。
6. 以下关于JVM即时编译器的说法,正确的有( )
A. 可以将字节码编译为本地机器码
B. 提高程序执行效率
C. 有多种即时编译器实现
D. 即时编译会消耗一定的系统资源
答案:ABCD
解析:JVM即时编译器可以将字节码编译为本地机器码,提高程序执行效率,有多种即时编译器实现,即时编译会消耗一定的系统资源。
7. 以下哪些是Java对象头的组成部分( )
A. 哈希码
B. GC分代年龄
C. 锁状态标志
D. 指向对象类元数据的指针
答案:ABCD
解析:Java对象头包括哈希码、GC分代年龄、锁状态标志、指向对象类元数据的指针等。
8. 以下关于垃圾收集的说法,正确的有( )
A. 可以回收不再使用的对象
B. 提高内存利用率
C. 不同的垃圾收集器有不同的特点
D. 垃圾收集会影响程序性能
答案:ABCD
解析:垃圾收集可以回收不再使用的对象,提高内存利用率,不同的垃圾收集器有不同的特点,垃圾收集会影响程序性能。
9. 以下哪些属于JVM的优化措施( )
A. 即时编译
B. 逃逸分析
C. 锁粗化
D. 锁消除
答案:ABCD
解析:即时编译、逃逸分析、锁粗化、锁消除都是JVM的优化措施。
10. 以下关于JVM类加载器的说法,正确的有( )
A. 启动类加载器加载的类是最基础的类
B. 扩展类加载器加载扩展目录下的类
C. 应用类加载器加载应用程序的类
D. 类加载器之间存在父子关系
答案:ABCD
解析:启动类加载器加载的类是最基础的类,扩展类加载器加载扩展目录下的类,应用类加载器加载应用程序的类,类加载器之间存在父子关系。
三、填空题(总共4题,每题5分)
1. JVM的内存区域主要包括程序计数器、虚拟机栈、本地方法栈、______和______。
答案:堆、方法区(JDK 8之前为永久代,JDK 8之后为元空间)
解析:JVM内存区域主要包括程序计数器、虚拟机栈、本地方法栈、堆和方法区(JDK 8之前为永久代,JDK 8之后为元空间)。
2. 垃圾收集算法主要有标记清除算法、标记整理算法、______算法和______算法。
答案:复制算法、分代收集算法
解析:垃圾收集算法主要有标记清除算法、标记整理算法、复制算法和分代收集算法。
3. 类加载的过程包括加载、______、______、初始化。
答案:验证、解析
解析:类加载的过程包括加载、验证、解析、初始化。
4. JVM的即时编译器有______和______等。
答案:C1、C2
解析:JVM的即时编译器有C1和C2等。
四、判断题(总共10题,每题2分)
1. JVM的所有内存区域都是线程私有的。( )
答案:错误
解析:程序计数器、虚拟机栈、本地方法栈是线程私有的,而堆和方法区是共享的。
2. 垃圾收集器在进行垃圾回收时不会影响程序的运行。( )
答案:错误
解析:垃圾收集器在进行垃圾回收时会暂停所有用户线程,从而影响程序运行。
3. 方法区主要用于存放编译后的字节码。( )
答案:错误
解析:方法区主要用于存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等。
4. 类加载器只能加载.class文件。( )
答案:错误
解析:类加载器可以加载多种形式的字节码,不仅仅是.class文件。
5. 新生代对象经过多次Minor GC后会进入老年代。( )
答案:正确
解析:新生代对象经过多次Minor GC仍然存活会晋升到老年代。
6. 标记清除算法不会产生内存碎片。( )
答案:错误
解析:标记清除算法会产生内存碎片。
7. JVM的即时编译器可以将所有字节码都编译为本地机器码。( )
答案:错误
解析:即时编译器会根据情况选择合适的字节码进行编译,不会将所有字节码都编译为本地机器码。
8. 应用类加载器是Java类加载器层次结构中的顶层类加载器。( )
答案:错误
解析:启动类加载器是Java类加载器层次结构中的顶层类加载器。
9. 当一个对象的所有引用都被释放后,它会立即被垃圾回收。( )
答案:错误
解析:当一个对象的所有引用都被释放后,它会被列入垃圾回收队列,但不一定会立即被回收。
10. 不同的垃圾收集器适用于不同的应用场景。( )
答案:正确
解析:不同的垃圾收集器有不同的特点,适用于不同的应用场景。
五、简答题(总共4题,每题5分)
1. 简述JVM的内存区域划分及各区域的作用。
答案:JVM内存区域主要包括程序计数器、虚拟机栈、本地方法栈、堆和方法区。程序计数器记录当前线程执行的字节码行号;虚拟机栈存放局部变量表、操作数栈等;本地方法栈用于执行本地方法;堆存放对象实例;方法区存放类信息、常量等。
解析:程序计数器记录当前线程执行的字节码行号,保证线程切换后能恢复正确执行位置。虚拟机栈为每个方法执行创建栈帧,存放局部变量和操作数栈等。本地方法栈用于执行本地方法。堆是对象实例的存放地。方法区存储类的相关信息等,为类的加载、运行提供支持。
2. 简述垃圾收集的过程及主要算法。
答案:垃圾收集过程包括标记出不再使用的对象,然后进行回收。主要算法有标记清除算法,先标记再清除;标记整理算法,标记后整理内存;复制算法,将内存分为两块,复制存活对象;分代收集算法,根据对象年龄分不同区域采用不同算法。
解析:首先通过可达性分析等方式标记出不再使用的对象,然后依据不同算法进行回收处理。标记清除算法简单但有碎片问题。标记整理算法可解决碎片问题。复制算法适用于新生代部分区域。分代收集算法根据对象年龄特点,对新生代、老年代采用不同算法,提高垃圾收集效率。
3. 简述类加载的双亲委派模型。
答案:双亲委派模型是指类加载器在加载类时,先将加载请求委托给父类加载器,只有当父类加载器无法加载时,才由自己加载。这样保证了类的加载顺序,避免类的重复加载,也保证了核心类库的安全性。
解析:双亲委派模型从顶层的启动类加载器开始,依次向下委托。比如应用类加载器加载类时,先委托扩展类加载器,扩展类加载器再委托启动类加载器。如果启动类加载器能加载则加载,不能则依次返回由扩展类加载器或应用类加载器加载。这种模型保证了类加载的层次和顺序,防止恶意类覆盖核心类库。
4. 简述JVM即时编译器的作用及优势。
答案:即时编译器的作用是将字节码编译为本地机器码,提高程序执行效率。优势在于避免了解释执行的开销,能让程序运行速度更快,尤其是对于热点代码,通过即时编译可显著提升性能。
解析:字节码在解释执行时效率相对较低,即时编译器将热点字节码编译为本地机器码后,程序执行时直接执行本地机器码,速度大幅提升。对于频繁执行的代码块,即时编译能极大地改善性能,减少解释执行的时间消耗,使程序运行更加高效。
展开阅读全文