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

相关推荐
coder!mq20 分钟前
说几个常见的语法糖?
java·开发语言·算法
gugucoding22 分钟前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ29 分钟前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
心平气和量大福大1 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
码哥DFS1 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
952361 小时前
Spring-cloud配置中心
java·spring·spring cloud·微服务
quantdash_cc2 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
ydd1001002 小时前
寻找两个正序数组的中位数 Java 题解,二分分割详解
java·开发语言
半亩码田2 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
真上帝的左手3 小时前
10. 软件设计&架构-Spring Security 7 整合CAS SSO 单点登录
java·spring·架构·sso