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++)