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

相关推荐
likerhood4 小时前
Java static 关键字从浅入深
java·开发语言
猫猫的小茶馆5 小时前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
计算机安禾5 小时前
【c++面向对象编程】第38篇:设计原则(二):里氏替换、接口隔离与依赖倒置
开发语言·c++
_院长大人_5 小时前
Java Excel导出:如何实现自定义表头与字段顺序的完全控制
java·开发语言·后端·excel
磊 子5 小时前
1.4CPU缓存一致性
java·spring cloud·缓存·系统
周末也要写八哥5 小时前
Eclipse 2024全流程网盘下载与安装配置教程详解
java·ide·eclipse
code_whiter5 小时前
C++1进阶(继承)
开发语言·c++
来恩10035 小时前
JSTL的标签库种类
java·开发语言
Miss_min5 小时前
128K长序列数据生成
开发语言·python·深度学习
小宋0015 小时前
QT中控件qss样式修改
开发语言·qt