【大白话说Java面试题 第63题】【JVM篇】第23题:工作中用过的JVM常用基本配置参数有哪些?

【大白话说Java面试题 第63题】【JVM篇】第23题:工作中用过的JVM常用基本配置参数有哪些? PDF大白话说Java面试题 — 02-JVM篇第23题工作中用过的JVM常用基本配置参数有哪些回答核心考点大厂面试不仅要列出参数还要说明调优理由和常见陷阱。以下按内存区域分类。1. 堆内存最常调参数含义生产建议反例陷阱-Xms初始堆大小与-Xmx一致避免动态扩容设置过小 → 频繁扩容停顿-Xmx最大堆大小物理内存的50%~70%容器内需留25%给OS设置过大 → GC停顿长 容器OOM kill-Xmn年轻代大小堆的1/3 ~ 1/4固定值可能导致老年代太小-XX:NewRatio老年代/年轻代比例-XX:NewRatio2年轻代1/3与-Xmn同时使用时-Xmn优先-XX:SurvivorRatioEden/Survivor比例-XX:SurvivorRatio8Eden 8S0和S1各1设置过小 → 动态年龄过早晋升示例8GB堆G1-Xms8g-Xmx8g-XX:MaxGCPauseMillis200注G1不推荐用-Xmn改用-XX:MaxGCPauseMillis自适应。2. 非堆内存常被忽略参数含义生产建议常见问题-Xss线程栈大小Linux 64位默认1MB可减至512KB1000线程省500MB设置太小 →StackOverflowError递归/深度调用-XX:MetaspaceSize元空间触发Full GC的阈值设为128m~256m默认21M太小 → 频繁Full GC-XX:MaxMetaspaceSize元空间最大大小256m~512m类加载多的应用如Spring Boot需更大不设可能无上限吃满内存-XX:MaxDirectMemorySize直接内存NIO默认等于-Xmx建议显式设如256m不设导致OutOfMemoryError: Direct buffer memory3. 垃圾回收相关选型关键参数含义场景-XX:UseG1GC启用G1JDK 9默认4GB堆-XX:UseParallelGC启用ParallelJDK 8默认吞吐优先批处理-XX:MaxGCPauseMillisG1目标停顿时间毫秒设100~200ms不要低于50ms-XX:G1HeapRegionSizeG1区块大小默认自动若手动设为1/2/4/8/16/32MB-XX:ParallelGCThreadsGC并行线程数默认CPU数的5/8容器内需手动设CPU核数4. OOM与调试救命参数-XX:HeapDumpOnOutOfMemoryError-XX:HeapDumpPath/path/to/dump.hprof-XX:OnOutOfMemoryErrorkill -9 %pHeapDumpOnOutOfMemoryErrorOOM时自动dump堆必备OnOutOfMemoryErrorOOM时执行脚本如重启5. 典型生产配置示例8核32GG1java-Xms16g-Xmx16g\-XX:UseG1GC\-XX:MaxGCPauseMillis150\-XX:ParallelGCThreads8\-Xss512k\-XX:MetaspaceSize256m\-XX:MaxMetaspaceSize512m\-XX:MaxDirectMemorySize256m\-XX:HeapDumpOnOutOfMemoryError\-XX:HeapDumpPath/data/logs/dump.hprof\-jarapp.jar6. 大厂面试追问Q1-Xms和-Xmx设一样堆就不会扩容了吗A堆容量物理上不变但内部Eden/Survivor比例仍会动态调整如自适应大小策略。G1下Region分配也会动态。Q2容器内如何设-XmxA应留25%左右给OS堆外。设-Xmx容器内存*0.7或用-XX:MaxRAMPercentage70.0JDK 8u191。Q3-Xss设多大安全A大部分应用256k~512k足够。若用大量递归/深度调用栈如JSON解析深度嵌套保留默认1M。Q4Metaspace设置太小会怎样A频繁触发Full GCMetadata GC Threshold导致吞吐下降。线上观察到大量Metadata GC Threshold应调大MetaspaceSize。面试官想要的满分总结“常用参数分四类堆大小-Xms/-Xmx、线程栈-Xss、元空间MetaspaceSize/MaxMetaspaceSize、GC选型与调优UseG1GC/MaxGCPauseMillis。生产必须配置-Xms-Xmx、-XX:HeapDumpOnOOM、合理设MetaspaceSize避免频繁Full GC。容器环境需额外注意MaxRAMPercentage和ParallelGCThreads不能超过CPU核数。”觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~