《Java效能優化權威指南》的邊邊角(2)——理解JVM-系統鎖
本文摘自《Java效能優化權威指南》第6章“Java應用效能分析技巧”,這一章介紹了一些非常實用的應用效能分析技巧。本文節選的是正文裡穿插的一個小TIP。
Performance Analyzer中標記為JVM-System條目代表JVM內部消耗的時間。檢視鎖競爭資訊時,該條目代表消耗在JVM內部鎖上的時間或時間百分比。圖6-11中JVM-System所消耗的時間值有些大得出奇。
圖6-11 按獨佔指標排序的Java monitor物件/鎖持有時間
針對這一現象,我們會進一步解釋,逐步澄清大家心中的謎團。第5章曾經提到資料呈現格式的切換,無論是從使用者模式切換到專家模式或是機器模式,都會暴露(顯示)JVM內部的操作並統計到使用者模式下的JVM-System條目中。同樣要注意的是,切換到專家模式或機器模式時,Java monitor物件會以_lwp_mutex
、__lwp_cond_wait
或__lwp_park
的條目顯示較高的競爭。圖6-13顯示了同樣的效能資料,不過這次在Performance Analyzer中是從使用者模式切換到專家模式。
圖6-13 使用者模式切換到專家模式
比較圖6-11和圖6-13表明JVM-System條目劃分為__lwp_condition_wait
和__lwp_park
操作。__lwp_condition_wait
與__lwp_park
之和與圖6-11中的JVM-System基本相等。看到這個結果,你的第一印象可能是JVM內部也存在鎖競爭。但選擇__lwp_cond_wait
條目,之後選擇“Callers-Callees”選項卡,沿著呼叫棧分析,最後會發現鎖活動的源頭是__lwp_cond_wait
,換句話說,這些鎖活動都與JVM-System條目有關,如圖6-14所示。
圖6-14中顯示的5個方法都為JVM的內部方法。我們注意到超過95%的歸因鎖時間消耗在GCTaskManager::get_task(unsigned)
方法上。
圖6-14 逆溯__lwp_cond_wait
的呼叫函式棧
這個方法是Java HotSpot虛擬機器垃圾收集子系統的一部分。垃圾收集器子系統工作時,會阻塞等待在一個工作佇列中。圖6-14列出的方法代表了Java HotSpot虛擬機器可能阻塞等待的各個工作佇列。例如,VMThread::loop()
方法代表Java HotSpot虛擬機器阻塞在一個佇列中等待接受工作。你可以將VMThread
想像成Java HotSpot虛擬機器的“核心執行緒”。CompilerBroker::compile_thread_loop()
方法代表JIT編譯子系統阻塞等待另一個佇列,諸如此類。瞭解了這些之後,你應該可以接受為什麼我們要忽略使用者模式下JVM-System條目下的內容,不將其統計在熱點鎖競爭的範圍之內的原因了。
相關文章
- 《Java效能優化權威指南》的邊邊角(3)——生存代和記憶體洩漏Java優化記憶體
- 《Java效能優化權威指南》的邊邊角(5)——被我們搬運的豆瓣讀書筆記Java優化筆記
- 《Java效能優化權威指南》的邊邊角(1)——如果你發現日誌中只有Full GCJava優化GC
- 小編薦書——Java效能問題的免疫魔法《Java效能優化權威指南》Java優化
- [原創]Java效能優化權威指南讀書思維導圖2Java優化
- [原創]Java效能優化權威指南讀書思維導圖Java優化
- [原創]Java效能優化權威指南讀書思維導圖3Java優化
- [原創]Java效能優化權威指南讀書思維導圖4Java優化
- Elasticsearch搜尋調優權威指南 (2/3)Elasticsearch
- 機器學習——邊角料機器學習
- 深入理解JVM(③)Java的鎖優化JVMJava優化
- 《Web效能權威指南》推薦序Web
- 訊號、系統與訊號處理邊角雜談
- [圖靈贈書]《Java效能權威指南》轉發贈書圖靈Java
- Java 13權威指南 - CodeFXJava
- css圓角矩形邊框CSS
- java邊遍歷邊刪除的問題Java
- JavaScript權威指南(2)——詞法結構JavaScript
- javascript權威指南閱讀筆記2JavaScript筆記
- Git權威指南Git
- HTTP權威指南HTTP
- Akka邊學邊寫(2)-- Echo ServerServer
- Elasticsearch搜尋調優權威指南 (1/3)Elasticsearch
- 前端效能優化指南前端優化
- MySQL效能優化指南MySql優化
- MongoDB效能優化指南MongoDB優化
- 直播app系統原始碼,Flutter MaterialButton 實現圓角邊框按鈕APP原始碼Flutter
- Netty權威指南:Java的I/O演進NettyJava
- 【效能優化】秒殺系統效能優化初體驗優化
- [java][鎖]java鎖的膨脹和優化Java優化
- 四邊形不等式優化DP優化
- button設定邊寬和圓角
- css設定四角邊框CSS
- CSS3邊框與圓角CSSS3
- 系統效能優化總結優化
- Flutter 彩邊圓角 Container 的實現FlutterAI
- unocss如何簡寫特定的邊角半徑CSS
- JavaScript 日期權威指南JavaScript