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

相关推荐
kylezhao20192 小时前
C# 中实现自定义的窗口最大化、最小化和关闭按钮
开发语言·c#
阿崽meitoufa2 小时前
JVM虚拟机:垃圾收集算法
java·jvm·算法
一苓二肆2 小时前
PUMA机械臂matlab仿真正逆解与路径规划
开发语言·matlab
数电发票API2 小时前
线上充值自动开票攻略:四步落地,告别人工低效内耗
java
Frank_refuel2 小时前
C++之继承
开发语言·c++
想用offer打牌2 小时前
Spring AI vs Spring AI Alibaba
java·人工智能·后端·spring·系统架构
顾北122 小时前
Java接入阿里百炼大模型实战指南
java·ai
毕设源码-郭学长2 小时前
【开题答辩全过程】以 高校水电表缴费系统的设计与实现为例,包含答辩的问题和答案
java
win x2 小时前
网络通信协议 第一部
java·网络协议