
面试官经常询问的JVM面试题目
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本书汇集了面试官在招聘Java开发工程师时最常问到的关于JVM的问题,旨在帮助求职者深入理解Java虚拟机的工作原理和技术细节,从而提高他们在技术面试中的表现。
Java虚拟机(JVM)是运行Java程序的基础环境,其内存管理在技术面试中常常被问及。以下是关于JVM的内存模型以及常见面试问题的详细解释:
1. **内存模型与分区**
- 方法区:存储类信息、常量池和编译后的字节码等数据,在Java 8版本后方法区被替换为Metaspace。
- 堆区:用于存放对象实例及数组,包括新生代(Young Generation)和老年代(Tenured Generation)。其中新生代由Eden空间以及两个Survivor区域组成。
- 栈区:每个线程拥有自己的程序计数器、虚拟机栈和本地方法栈。主要用于存储局部变量表、操作数栈及方法返回信息等数据结构。
- 本地方法栈:为JNI(Java Native Interface)提供服务支持,处理与非Java语言的交互部分。
- 程序计数器:记录当前线程执行字节码指令的位置。
2. **堆内存分区**
- Eden空间是新生代的主要区域,新创建的对象首先被分配到这里。Survivor(From & To)两个区域用于对象复制和存活检查,通常一个为空另一个存放存活对象。
- 老年代:经历过多次垃圾回收仍然存活的对象会被移动到老年代。
3. **对象的创建与内存分配**
使用`new`关键字创建新实例时,默认在堆中为其分配空间,并在线程栈上保存该引用变量信息。
4. **垃圾收集判定方法**
- 引用计数法:虽然简单但无法解决循环引用问题,因此JVM未采用。
- 可达性分析(或称作引用链):通过追踪GC Roots对象来判断其他对象是否可达。不可达的对象则可以被回收。
5. **SafePoint**
在特定程序执行点如循环结束、方法返回前等位置设置安全检查点,允许JVM在这些时刻暂停线程以便进行垃圾收集操作。
6. **常见的垃圾收集算法**
- 标记-清除:标记存活对象并清理死亡对象;会产生内存碎片。
- 复制算法:将内存分为两部分交替使用,并复制存活的对象到另一区域,避免了内存碎片但牺牲了一半的空间利用率。
- 标记整理:先标记所有活的实体再将其移动至一端,然后清除掉不再使用的空间。适合用于老年代。
7. **垃圾收集器类型**
并行串行收集器和CMS(Concurrent Mark Sweep)以及G1(Garbage-First)等不同类型的GC工具适用于不同的应用场景:并行/并发能力、低延迟需求或预测控制停顿时间等方面各有优势。选择合适的策略可以有效提高系统性能。
8. **Minor GC与Full GC**
Minor GC在新生代内存不足时触发;而当老年代空间不够使用或者基于其他条件(如用户请求)的Full GC则会启动,后者通常包括更广泛的垃圾回收操作范围。
9. **内存调试工具**
- jmap:提供查看堆内存状态及导出堆转储文件的功能;
- jstack:用于获取线程栈信息帮助诊断问题;
- jconsole:GUI界面监控JVM性能和内存使用情况的工具;
- jhat与MAT(Memory Analyzer Tool)则可进一步分析这些数据以发现潜在的问题,如内存泄漏。
10. **类加载过程**
包括从文件系统中定位并读取字节码、验证正确性和安全性、为静态变量分配默认值和初始化等步骤。一旦完成所有准备阶段就可以使用该类型,并在不再需要时卸载它。
掌握以上JVM相关知识有助于解决性能瓶颈问题,优化代码效率,在技术面试中展示专业技能水平。选择适当的垃圾收集策略和技术以达到降低停顿时间、提高内存利用率及减少碎片的目标是非常重要的。
全部评论 (0)


