请列举你熟悉的 JVM 参数,并分类说明各参数的作用与适用场景。
考察说明
考查候选人对 JVM 参数体系的理解深度与实战经验。
回答思路
- 【回答框架 1】JVM 参数主要分为标准参数、-X 非标准参数和 -XX 参数三类,其中 -XX 又分为布尔型(-XX:+/-Flag)与键值型(-XX:Key=Value)。常见分类包括堆内存设置、垃圾收集器选择、日志与错误处理、性能调优等。
- 【回答框架 2】堆内存参数:-Xms 设置初始堆大小,-Xmx 设置最大堆大小,-Xmn 设置新生代大小;-XX:NewRatio 与 -XX:SurvivorRatio 调节新老年代与幸存区比例;-XX:MaxMetaspaceSize 限制元空间上限。这些参数直接影响对象分配与 GC 频率。
- 【回答框架 3】GC 相关参数:-XX:+UseG1GC 选择 G1 收集器,-XX:MaxGCPauseMillis 设定 GC 暂停目标,-XX:ParallelGCThreads 与 -XX:ConcGCThreads 调整并行与并发线程数;日志参数如 -Xlog:gc* 用于记录 GC 详情,-XX:+HeapDumpOnOutOfMemoryError 与 -XX:HeapDumpPath 配置堆转储,便于排查内存溢出。
- 【回答框架 4】实际调优依赖业务特征与压测结果。初始堆设为最大堆的 1/2 到 2/3 可减少扩容抖动,但具体值需观察对象存活率与 Full GC 频率;G1 适合堆较大、停顿敏感的应用,而 CMS 已被移除,需避免使用;同时需关注 -XX:MaxDirectMemorySize 限制直接内存,-XX:ThreadStackSize 控制线程栈大小,以防此类资源耗尽。
- 【关键点 1】JVM 参数分三类:标准、-X、-XX,-XX 包含布尔型与键值型。
- 【关键点 2】堆参数 -Xms/-Xmx/-Xmn 直接决定堆分配,需结合业务估算与压测。
- 【关键点 3】GC 参数如 -XX:+UseG1GC 与 -XX:MaxGCPauseMillis 影响停顿,但需实际验证。
- 【关键点 4】-XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath 是排查 OOM 的利器。
- 【关键点 5】-XX:MaxMetaspaceSize 与 -XX:MaxDirectMemorySize 分别限制元空间与直接内存,防止溢出。
- 【易错点 1】仅凭公式设置堆大小而忽略实际运行数据,导致频繁 Full GC。
- 【易错点 2】混淆 -Xmn 与 -XX:NewRatio 的作用范围,二者同用时需注意优先级。
- 【易错点 3】未开启 GC 日志或堆转储参数,问题发生时无法定位根因。