您好,登录后才能下订单哦!
# JVM的面试真题有哪些
## 目录
- [一、JVM内存模型](#一jvm内存模型)
- [二、垃圾回收机制](#二垃圾回收机制)
- [三、类加载机制](#三类加载机制)
- [四、性能调优实战](#四性能调优实战)
- [五、高级特性与原理](#五高级特性与原理)
- [六、综合场景题](#六综合场景题)
- [总结](#总结)
---
## 一、JVM内存模型
### 1.1 运行时数据区划分
**问题:请描述JVM运行时数据区的组成及其作用?**
**参考答案:**
- **程序计数器**:线程私有,记录当前线程执行的字节码行号指示器
- **虚拟机栈**:线程私有,存储栈帧(局部变量表、操作数栈、动态链接、方法出口)
- **本地方法栈**:为Native方法服务
- **堆**:线程共享,存放对象实例和数组,GC主要区域
- **方法区**:存储类信息、常量、静态变量(JDK8后由元空间实现)
**示例代码:**
```java
public class MemoryModel {
private static final String CONSTANT = "常量"; // 方法区
private int instanceVar; // 堆
public void method() {
int localVar = 1; // 虚拟机栈
Object obj = new Object(); // obj引用在栈,对象在堆
}
}
问题:什么情况下会导致OutOfMemoryError
?如何定位?
参考答案:
- 堆溢出:对象过多且无法回收(-Xmx
设置过小)
- 栈溢出:递归过深(-Xss
调整栈大小)
- 方法区溢出:动态生成大量类(CGLib动态代理)
- 直接内存溢出:NIO的ByteBuffer.allocateDirect()
定位工具:
jmap -heap <pid> # 堆内存分析
jstack <pid> # 线程栈分析
jstat -gcutil <pid> # GC统计
算法 | 原理 | 优缺点 |
---|---|---|
标记-清除 | 标记存活对象后清除 | 产生内存碎片 |
标记-整理 | 标记后压缩内存 | 耗时但无碎片 |
复制算法 | 内存分为两块交替使用 | 空间利用率低但高效 |
问题:CMS和G1收集器的区别?
参考答案:
- CMS:基于标记-清除,追求最短停顿时间,但会产生碎片
- G1:分Region收集,可预测停顿模型,适合大堆(JDK9默认)
关键参数:
-XX:+UseConcMarkSweepGC # 启用CMS
-XX:+UseG1GC # 启用G1
-XX:MaxGCPauseMillis=200 # 目标停顿时间
问题:描述类加载的双亲委派模型及其破坏场景
参考答案:
1. 流程:
- 子加载器先委托父加载器
- 父加载器无法完成时子加载器尝试
2. 破坏场景:
- SPI机制(如JDBC使用ServiceLoader
)
- OSGi动态模块化
示例:
// 自定义类加载器需重写findClass()
class CustomClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) {
// 从自定义路径加载类
}
}
场景:服务频繁Full GC导致响应延迟
解决步骤:
1. jmap -dump:format=b,file=heap.hprof <pid>
导出堆快照
2. 使用MAT分析内存泄漏点(如ThreadLocal未清理)
3. 优化代码并调整JVM参数:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/dump.hprof
问题:JVM如何优化栈上分配?
参考答案:
- 通过逃逸分析确定对象作用域
- 未逃逸对象可在栈上分配(减少GC压力)
- 需开启-XX:+DoEscapeAnalysis
问题:如何设计一个避免Young GC频繁的系统?
解决方案:
1. 对象池化技术(如Apache Commons Pool)
2. 增大新生代比例(-Xmn
)
3. 选择适合的Survivor区比例(-XX:SurvivorRatio=8
)
考察方向 | 高频考点 |
---|---|
内存模型 | 各区域作用及溢出场景 |
GC机制 | 算法对比、收集器选择 |
类加载 | 双亲委派及热替换实现 |
调优实战 | 工具使用与参数优化 |
持续学习建议:
- 阅读《深入理解Java虚拟机》
- 分析开源项目JVM配置(如Kafka、Spark)
- 使用Arthas进行线上诊断
“`
注:实际9500字内容需扩展每个章节的详细案例分析、更多面试题变体及配图说明。以上为结构化框架,可根据需要补充具体技术细节和实战经验。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。