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 参数和代码优化,从根本上提升系统性能和稳定性。

相关推荐
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨1 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川1 天前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo1 天前
查看 Tomcat 的堆内存参数
java·tomcat