易燃物匯聚 YouTube 有聲書與書評
劍指JVM:虛擬機實踐與性能調優 封面

劍指JVM:虛擬機實踐與性能調優

尚硅谷教育

4449人在讀
31萬字總字數
¥90.3定價

內容簡介

《劍指JVM:虛擬機實踐與性能調優》共分5篇:引言篇講述了Java與Java虛擬機的關係,以及Java虛擬機的相關知識;第1篇講述了運行時數據區,涉及Java內存區域的各個核心結構,以及對象創建的各種細節;第2篇講述了垃圾收集,涉及各種收集算法、垃圾收集器;第3篇講述了字節碼與類的加載;第4篇講述了性能監控與調優,帶領讀者學習Java虛擬機常用的監控與調優工具,並附有企業級的性能調優案例。本書配套視頻,可以關注尚硅谷教育公衆號獲取。

讀者書評

★★★★★

我覺得是非常好,非常實用的一本書。有大量貼合簡化但又貼合實際的代碼案例和過程插圖,有很強烈的實用主義風格,並且實際上是鑽的很深的。我認爲很適合工作1-3年的java工程師閱讀。 其實我覺得JVM調優並沒有看起來那麼高大上,尤其在中國互聯網環境下,很多初級工程師(工作3,5年內)就需要一個人負責一大攤子業務,就很可能接觸到性能瓶頸,調優的問題。 而調優並不像我們想象的深鑽20年,然後把95分調到98分。更多是知識點掃盲,從60分調到80分。所以即使是初級工程師,也是有必要了解的。 至於本書的內容,我覺得可以分兩部分看待: 一部分講述結構,原理,比如JVM裏的堆,棧,方法區,垃圾回收機制及各種垃圾收集器等等這些部分可以仔細閱讀,即使自己工作中不涉及jvm調優。去了解這一部分是有助於在頭腦中建立概念,對寫代碼,思考排查線上問題大有裨益的。 另一部分像書裏會很深入地介紹字節碼的編譯,甚至字節碼指令的含義,以及一些垃圾處理的細節等這樣的內容。我認爲實際上沒必要細讀,如果真的用到了,可以再回來當工具書翻閱即可。

★★★★★

花了很長時間把這本大部頭的書讀完了,總體還是很不錯的,對底層原理講解很詳細,不過可能是時間問題,書中還是有不少錯字和漏字的情況,這本書雖然比起周志明的書遜色一些,但是總體也不差,讀起來還是有很多收穫的!

★★★★★

- 劍指JVM.虛擬機實踐與性能調優 2023.5; Java與JVM關係/JVM相關知識 運行時數據區.Java內存區域的各個核心結構/對象創建的各種細節 GC.算法/垃圾收集器 字節碼與類的加載 性能監控與調優.企業級的性能調優案例

★★★★★

最初讀了《深入理解java虛擬機》,因爲版本太老,信息舊了,搜到這本書。相比來說,本書更值得推薦,更詳細、實操性更強,把複雜的內容講得很清晰通透,屬於少有的優秀教材,顛覆了對培訓機構出版教材的認知。

★★★★★

講理論的同時,還會伴隨着字節碼調用分析,對於理解jvm的各概念或工作機理都很有幫助。後面的工具介紹、調優案例對實踐中分析程序性能也很有幫助,雖然介紹的不是太詳細。總體來說,這本書值得閱讀。

★★★★★

JVM 虛擬機實踐與性能調優核心公式 1. 內存相關核心公式 1. JVM 堆內存可用空間公式 可用堆空間 = 最大堆內存(-Xmx) - 最小堆內存(-Xms) + 剩餘堆內存 2. 堆內存使用率公式 堆內存使用率 = (已使用堆內存 / 當前堆內存大小) × 100% 3. 新生代對象晉升老年代觸發條件 晉升閾值 = 新生代年齡計數器最大值(-XX:MaxTenuringThreshold) 當對象年齡 ≥ 晉升閾值 時,對象進入老年代 4. Minor GC 觸發條件 Eden區使用率 = (Eden區已用空間 / Eden區總空間) × 100% 當 Eden區使用率達到閾值時,觸發 Minor GC 2. GC 性能核心公式 1. GC 吞吐量公式 吞吐量 = (應用程序運行時間 / (應用程序運行時間 + GC 總耗時)) × 100% 2. GC 停頓時間公式 單次 GC 停頓時間 = GC 結束時間 - GC 開始時間 平均 GC 停頓時間 = 總 GC 停頓時間 / GC 次數 3. Full GC 觸發頻率公式 Full GC 頻率 = Full GC 次數 / 運行時長(單位:次/小時) 3. 線程與CPU相關公式 1. 線程 CPU 使用率公式 線程 CPU 使用率 = (線程佔用 CPU 時間 / 總 CPU 時間) × 100% 2. JVM 進程 CPU 使用率公式 JVM CPU 使用率 = (JVM 進程佔用 CPU 時間 / 系統總 CPU 時間) × 100% 4. 類加載與內存泄漏相關公式 1. 類加載率公式 類加載率 = 已加載類數量 / 總可加載類數量 × 100% 2. 內存泄漏判定公式 內存泄漏趨勢 = 多次 GC 後老年代內存佔用差值 / 時間間隔 若差值持續爲正且無下降,大概率存在內存泄漏 5. 調優目標量化公式 1. 響應時間優化目標 目標響應時間 = 原響應時間 - (原響應時間 × 調優目標百分比) 2. 內存佔用優化目標 目標內存佔用 = 原內存佔用 × (1 - 調優目標百分比)

★★★★★

這本書對於理解和應用虛擬機技術以及優化性能方面提供了非常寶貴的指導和深入見解。 首先,書中系統地介紹了虛擬機的基礎概念、原理、工作原理和常見問題。深入淺出地講解風格使得複雜的概念易於理解,並通過豐富的實例幫助讀者將知識應用於實踐中。 其次,該書不僅提供了理論知識,還詳細介紹了虛擬機的常見問題和調優技巧。並提供了一些建議和實踐案例來解決這些問題。這些實用的技巧對於從事虛擬化平臺管理和優化工作的專業人士來說至關重要。 總之,這是一本深入、全面、實用且易讀的書籍。它是一本對於想要在虛擬化領域深入學習和應用的讀者來說不可或缺的參考資料!

★★★★★

Compile Once, Run Anywhere. JVM 的職責:解釋執行字節碼,能夠運行任何編譯成字節碼的計算機語言。 跨平臺性:Java 解決了跨平臺的問題,並且 JVM 也支持其他語言的跨平臺。 虛擬機的強大:儘管 Java 語言本身並非最強大,但 JVM 被公認爲最強大的虛擬機。 虛擬機概述 定義:虛擬機是一種軟件,用於執行虛擬計算機指令。可以分爲系統虛擬機和程序虛擬機。 三層架構:類裝載器子系統:通過類裝載器機制將編譯好的字節碼存放在 JVM 內存區域。 運行時數據區:存儲運行時數據的區域,包括方法區、堆、Java 棧、程序計數器和本地方法棧。 執行引擎層:包含解釋器、JIT 編譯器和垃圾回收器(GC)。 編譯與解釋 半編譯半解釋型語言:Java 採用 JIT 即時編譯技術,將常用方法或代碼塊編譯成本地機器碼。 指令集架構:基於棧的指令集架構,另一種是基於寄存器的指令集架構。 基於棧式架構的特點 設計和實現簡單:適用於資源受限的系統。 避開寄存器分配問題:使用零地址指令方式操作。 指令集小:編譯器實現更容易。 不需要硬件支持:跨平臺性更好。 基於寄存器架構的特點 典型應用:如 x86 指令集和 Android 的 Dalvik 虛擬機。 依賴硬件:可移植性差,但性能優越。 指令直接由 CPU 執行:執行效率更高。 少量指令完成操作。 指令類型:通常爲一地址指令、二地址指令和三地址指令,而基於棧式架構的是零地址指令。 設計總結 Java 指令基於棧設計:爲了實現跨平臺性,不同平臺的 CPU 架構不同,無法設計爲基於寄存器。 優點:跨平臺、指令集小、編譯器易於實現。 缺點:性能較差,實現同樣功能需要更多指令。 JVM 的生命週期 三個狀態:啓動、執行和退出。 歷史背景:早期 Sun Classic/C++ 程序的 VM 無法高效協同解釋器和編譯器,導致 “Java 語言很慢” 的印象。 GCIH 技術 GC Invisible Heap:將生命週期較長的 Java 對象移到 heap 之外,GC 無法管理 GCIH 內部的 Java 對象,降低 GC 回收頻率並提升效率。GCIH 對象還可在多個 JVM 進程中共享。 數據區域類型 線程共享數據區:在 JVM 啓動時創建,退出時銷燬。 線程私有數據區:在創建線程時創建,線程退出時銷燬。 HotSpot 虛擬機 線程與本地線程直接映射。 未捕獲異常:可能導致 Java 線程終止,進而決定 JVM 是否終止。 守護線程:在後臺完成系統服務,僅當只有守護線程時,JVM 自動退出。 程序計數器 抽象模擬物理寄存器。 字節碼解釋器:通過改變計數器值選取下一條字節碼指令,指示程序控制流。 線程私有:每個線程都有自己的計數器,生命週期與線程一致。 用途:存儲字節碼指令地址,支持線程切換後續執行。 虛擬機棧 棧幀組成:包括局部變量表、操作數棧、動態鏈接、方法返回地址和附加信息。 線程私有:虛擬機棧的生命週期與線程一致。 棧的特點:快速有效的分配存儲方式,訪問速度快,存在內存溢出但無垃圾回收問題。 棧幀內容 局部變量表:存儲方法參數和局部變量。 操作數棧:用於表達式計算。 動態鏈接:指向運行時常量池的方法引用。 方法返回地址:存儲方法正常退出或異常退出的信息。 棧頂緩存技術 原理:將頻繁訪問的棧頂元素緩存到物理 CPU 的寄存器中,減少內存讀寫次數,提高執行效率。 本地方法接口JNI:Java 調用非 Java 代碼的接口。 本地方法棧傳統棧支持:用於本地方法執行。 堆堆與棧:堆是存儲單元,棧是運行單元。棧中處理的數據主要來源於堆。 線程共享:堆是所有線程共享的運行時內存區域。 唯一性:每個 JVM 實例對應一個堆空間。 邏輯連續:儘管物理上不連續,但邏輯上視爲連續。 分代收集理論:堆內存分爲新生代和老年代。 垃圾回收:新生代 GC(Minor GC)頻繁,老年代 GC(Major GC)較少。 新生代 GC 觸發機制:新生代空間不足時觸發。 頻率:較高,但速度快。 STW:Minor GC 會暫停其他用戶線程,待回收結束後恢復。 老年代 GC 觸發機制:老年代空間不足或對象從老年代消失時觸發。 速度:較 Minor GC 慢,STW 時間長。 Full GC:觸發機制包括調用 System.gc()、老年代或方法區空間不足等。 TLAB 私有緩存區域:每個線程分配在 Eden 區內。 默認大小:佔 Eden 區的 1%,可通過參數調整。 內存分配失敗:會嘗試使用加鎖機制在 Eden 區分配內存。 堆外存儲 逃逸分析:用於優化對象分配,減少堆內存佔用,提高性能。 標量替換:減少堆內存佔用的技術。 逃逸分析優化 棧上分配:將堆分配轉化爲棧分配。 同步省略:對於僅被一個線程訪問的對象,可以不考慮同步。 分離對象或標量替換:不需要作爲連續內存結構存在的對象可以存儲在棧中。 JDK 8 變化 內存分配:intern 字符串緩存和靜態變量從永久代轉移到元空間。 JIT 編譯器優化:通過逃逸分析實現對象分配優化。

★★★★★

年前發現這本寶貝書,這本書會從運行時的內存結構來講 JVM,每個結構講的比網上的博客或者周志明的那本經典要細一些。很適合想入門或者想深入一點學習 JVM 的寶子。還沒看完,希望再花兩個月時間看完吧,彌補 JVM 這 一塊的空白。目前已購一本紙質書,應該白嫖這麼久,應該交交學費了😁

★★★★★

現在面試越來越捲了,Jvm作爲面試必問的一個知識點,掌握這個技能已經是必不可少了。尚硅谷不僅有各種各樣的學習視頻,如今還有了電子書,這種方式真的挺好的,學習過程更輕鬆更方便,隨時隨地打開手機都能學習,內容講解通俗易懂,深入淺出,大讚。

書籍信息

作者尚硅谷教育
出版社清華大學出版社
出版時間2023-05-01
ISBN9787302628118
分類計算機-計算機綜合
格式EPUB
完結狀態連載中
章節數31