java jvm 调优

ai 生成的解决思路感觉已经很全面了

JVM 调优四大方向【终极速查版】

一、监控工具(发现 JVM 问题)

1️⃣ 必会 JDK 工具

工具 作用

jps 查看 JVM 进程

jstat GC 情况、是否频繁 Full GC

jmap 堆内存、对象分布、OOM

jstack 线程状态、死锁、CPU 飙高

👉 典型命令

jps -l

jstat -gc PID 1000

jmap -histo PID | head

jstack PID

2️⃣ 可视化 / 线上工具

JConsole / VisualVM(基础)

Arthas ⭐(生产强烈推荐)

dashboard

thread -n 5

heapdump

watch

二、Linux 命令(定位系统瓶颈)

1️⃣ CPU

top

top -H -p PID

高 CPU → 找线程 → jstack 定位代码

2️⃣ 内存

free -m

vmstat 1

关注:

available

swap 是否频繁

3️⃣ IO / 磁盘

iostat -x 1

df -h

4️⃣ 网络

netstat -anp | grep java

ss -ant

三、JVM 参数设置(治标但必须)

1️⃣ 堆内存(最重要)

-Xms4g

-Xmx4g

-Xmn1g

原则:

Xms = Xmx

年轻代 ≈ 堆的 1/3 ~ 1/4

2️⃣ GC 选择

GC 场景

Parallel 吞吐量优先

CMS 低停顿(已过时)

G1 ⭐ 大堆、低停顿

-XX:+UseG1GC

-XX:MaxGCPauseMillis=200

3️⃣ GC 日志 & OOM

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:/logs/gc.log

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/logs

4️⃣ 常见现象 → 参数思路

现象 方向

Minor GC 频繁 Eden 太小

Full GC 频繁 Old 区不足 / 内存泄漏

停顿时间长 G1 + 降低大对象

OOM 查代码,不是先加内存

四、代码优化(根本解决 ⭐⭐⭐)

1️⃣ 减少对象创建

// ❌

new String("abc");

// ✅

"abc";

2️⃣ 集合预估容量

new ArrayList<>(1000);

new HashMap<>(1024);

3️⃣ 避免大对象

大 List

大 byte\[\]

大 JSON 字符串

👉 用 分页 / 流式处理

4️⃣ 资源及时释放

try (InputStream in = ...) {

}

5️⃣ 防止内存泄漏(高频考点)

static 集合

ThreadLocal

Listener 未移除

threadLocal.remove();

五、JVM 调优标准流程(面试必杀)

现象

监控工具(jstat / jstack / jmap)

Linux 命令确认资源

JVM 参数调整

代码层根因修复

验证(GC / RT / CPU)

六、面试一句话总结(直接背)

JVM 调优不是盲目改参数,而是通过监控工具和 Linux 命令定位问题,结合 JVM 参数和代码优化,从根本上提升系统性能和稳定性。

相关推荐
Flynt1 小时前
OpenJDK禁AI代码半年了,现在执行得怎么样?答案是:全靠自觉
java·开源·ai编程
古法安卓6 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding7 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng8 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
十年Java程序媛10 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko10 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户31268748772013 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang13 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing13 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活14 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端