Day5: JVM
上午(3小时):JVM调优基础与工具学习
核心目标:掌握JVM调优的核心参数、工具使用(VisualVM、JConsole),理解堆大小、线程栈、直接内存的优化策略。
1. 学习内容与步骤
精读《深入理解Java虚拟机》第4章(重点:4.2-4.4节)
核心知识点:
堆大小调优:
-Xmx
(最大堆内存)、-Xms
(初始堆内存);新生代与老年代比例(
-XX:NewRatio
)。
线程栈调优:
-Xss
(线程栈大小),默认1MB,可适当降低以减少内存占用;线程数过多时,调整栈大小避免
OutOfMemoryError: unable to create new native thread
。
直接内存调优:
-XX:MaxDirectMemorySize
(限制直接内存大小);NIO堆外内存泄漏排查(如未释放
ByteBuffer
)。
学习建议:
整理JVM调优参数表(如下),标注各参数的作用与适用场景。
参数作用描述示例值-Xmx
最大堆内存
-Xmx2g
-Xms
初始堆内存
-Xms2g
-Xss
线程栈大小
-Xss512k
-XX:NewRatio
新生代与老年代比例
-XX:NewRatio=2
-XX:MaxDirectMemorySize
最大直接内存大小
-XX:MaxDirectMemorySize=1g
VisualVM与JConsole工具学习
VisualVM:
功能:监控JVM内存、线程、GC状态,生成堆内存快照;
安装:VisualVM官网;
使用:连接本地/远程Java进程,查看实时性能数据。
JConsole:
功能:监控JVM内存、线程、类加载、MBean;
使用:运行
jconsole
命令,选择目标进程。
Arthas调优辅助
常用命令:
memory
:查看JVM内存使用情况;thread
:分析线程状态与阻塞问题;heapdump
:导出堆内存快照供进一步分析。
2. 学习产出
JVM调优参数表:整理核心参数及其作用(如上表);
知识笔记:记录VisualVM与JConsole的使用技巧(如远程连接配置)。
下午(3小时):线上模拟服务调优实战
核心目标:通过模拟高并发服务,实践JVM调优策略,优化GC暂停时间与内存使用。
1. 实战步骤与代码示例
编写模拟高并发服务
代码示例:使用线程池处理请求,模拟内存分配与GC压力。
运行服务并监控性能
JVM参数:
监控工具:
使用VisualVM连接服务,观察内存、线程、GC状态;
使用Arthas监控方法调用耗时(如
trace
命令)。
调优策略实施
优化堆大小:
调整
-Xmx
与-Xms
为1GB,观察GC频率与暂停时间变化;对比
-XX:NewRatio=2
与-XX:NewRatio=3
的性能差异。
优化GC算法:
对比G1与CMS的性能(如GC暂停时间、吞吐量);
调整G1的
-XX:MaxGCPauseMillis
为100ms,观察效果。
优化线程栈:
调整
-Xss
为256KB,减少内存占用,观察线程创建数量上限。
性能对比与报告生成
测试结果:
调优策略GC暂停时间(ms)吞吐量(请求/秒)内存使用(MB)默认参数(G1, 512MB)
200
500
480
调整堆大小(1GB)
150
600
900
调整GC算法(CMS)
100
550
500
调整线程栈(256KB)
200
500
400
2. 交付物要求
调优报告:
结构模板:
性能监控截图:
提交VisualVM监控视图(如内存使用趋势、GC日志);
提交Arthas命令输出(如
memory
、thread
)。
晚上(2小时):总结与输出
技术博客:
标题:《Day5:JVM调优实战——从堆大小到GC算法的性能优化》
内容框架:
JVM调优核心参数详解;
模拟高并发服务的调优过程;
性能对比与优化建议。
提交GitHub与文档:
创建仓库(如
jvm-tuning-demo
),提交以下内容:HighConcurrencyService.java
(模拟代码);调优报告.md
(详细调优过程与结果);性能监控截图(VisualVM、Arthas输出)。
README.md:说明如何复现测试及调优步骤。
资源使用建议
书籍重点章节:
《深入理解Java虚拟机》第4章(精读4.2-4.4节);
《Java性能权威指南》第6章(JVM调优实战)。
工具与代码参考:
VisualVM官方文档:链接;
G1 GC调优指南:Oracle官方文档。
明日预习(Day6)
核心内容:并发基础(synchronized、CAS、AQS);
工具准备:准备多线程测试用例(如生产者-消费者模型)。
Day5完成标志:调优报告完整、性能监控数据清晰、博客发布。 若遇到问题:优先查阅《深入理解Java虚拟机》第4章,或在Stack Overflow搜索“JVM tuning example”。
Last updated