1. 基础知识
1.1 Java性能调优概述
1.1.1 性能调优的重要性
性能调优是提升系统效率、降低成本和增强用户体验的关键步骤。通过优化,可以减少响应时间、降低资源消耗并提高系统的稳定性和可扩展性。
1.1.2 性能问题的常见表现
- 高CPU使用率:可能由热点方法或线程阻塞引起。
- 内存泄漏:导致OutOfMemoryError或频繁GC。
- I/O瓶颈:文件或网络读写速度过慢。
- 数据库延迟:SQL查询效率低下。
1.1.3 性能优化的基本原则
- 先定位后优化:使用工具找到瓶颈后再进行调整。
- 优先解决关键问题:关注对系统影响最大的部分。
- 持续迭代:性能优化是一个长期过程。
1.2 Java虚拟机基础
1.2.1 JVM架构简介
JVM主要由以下部分组成:
- 类加载器(ClassLoader):负责加载字节码。
- 运行时数据区:包括堆、栈、方法区等。
- 执行引擎:解释或编译字节码为机器码。
1.2.2 垃圾回收机制(GC)
- GC类型:
- Minor GC:发生在年轻代。
- Major GC:发生在老年代。
- Full GC:涉及整个堆。
- 垃圾收集器:
- Serial:单线程GC。
- Parallel:多线程GC。
- CMS:并发标记清除。
- G1:分区GC。
- ZGC:低延迟GC。
示例:观察GC日志
java -Xlog:gc -jar myapp.jar
1.2.3 类加载与内存分配
- 类加载阶段:加载、验证、准备、解析、初始化。
- 内存分配策略:对象优先分配到Eden区,大对象直接进入老年代。
2. 性能剖析工具介绍
2.1 内置工具
2.1.1 JConsole
JConsole用于监控JVM的内存、线程、类加载等信息。
示例:启动JConsole
jconsole
2.1.2 VisualVM
VisualVM功能更强大,支持采样、线程分析、Heap Dump生成等。
示例:生成Heap Dump
jmap -dump:live,format=b,file=heap.hprof <pid>
2.1.3 Java Mission Control (JMC)
JMC提供实时性能监控和诊断功能。
示例:记录飞行记录
jcmd <pid> JFR.start name=MyRecording settings=profile duration=60s filename=recording.jfr
2.2 第三方工具
2.2.1 JProfiler
JProfiler支持CPU、内存、线程分析。
示例:分析热点方法
@Profiled
public void heavyMethod() {try { Thread.sleep(1000); } catch (InterruptedException e) {}
}
2.2.2 YourKit
YourKit功能类似于JProfiler,支持远程调试。
示例:分析内存泄漏
static List<String> leakList = new ArrayList<>();
for (int i = 0; i < 1000000; i++)