2020 最全JVM性能調優:垃圾回收+線程+類加載+子系統...(乾貨)

java架構 發佈 2020-02-26T20:07:01+00:00

在網際網路行業,JVM毫無疑問已經是最熱門的技術之一JVM是JavaVirtual Machine的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。

JVM調優

  1. 概念
  2. 基本垃圾回收算法
  3. 垃圾回收面臨的問題
  4. 分代垃圾回收詳述1
  5. 分代垃圾回收詳述2
  6. 典型配置舉例1
  7. 典型配置舉例2
  8. 新一代的垃圾回收算法
  9. 調優方法
  10. 反思

什麼是JVM?

在網際網路行業,JVM毫無疑問已經是最熱門的技術之一

JVM是Java Virtual Machine(Java 虛擬機)的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。

Java語言的一個非常重要的特點就是平台無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平台上的機器指令執行。這就是Java的能夠「一次編譯,到處運行」的原因。

JVM有哪些特性?

1、移植性

無論是GC還是Hotspot都可以用在任何Java可用的地方。比方說,JRuby可以運行在其他平台上,Rails應用就可以運行在IBM主機上的JRuby上,而且這台IBM主機運行的是CP/CMS.實際上,由於Java和OpenJDK項目的開源,我們正在看到越來越多的平台的衍生,因此JVM的移植性也將越來越棒。

2、成熟

JVM已有多年的歷史,在過去的這些年裡,許多開發者為它做出了許多貢獻,使得它的性能一次又一次地提升,讓JVM變得更加穩定、快速和廣泛。

3、覆蓋面

JRuby和JVM上的其他語言項目已經被承認,一個例子是invokedynamic specification(akaJSR292)。JSR越來越配合新的語言,JVM已不再是Java一個人定製規則。JVM正在構建成為類如JRuby等項目的優良平台。還有一個MLVM(multiple languageVM)項目,好比是新特性的清算機構,是一個許多企業應用的開發者試圖添加應用的地方,而這些應用正是他們想在JVM中看到的。而且JVM開發者互相協作、彼此影響,無疑這有利於JVM新特性的誕生。這些細節都可以看到JVM正在關注開發者的需求,擴大他的覆蓋面。

關注後留意私信回復【架構書籍】即可免費領取史上最全JVM實戰文檔

JVM內存區域劃分

1.程序計數器(線程私有)

2Java棧(線程私有)

3.本地方法棧(線程私有)

4.堆(線程共享)

5.方法區(線程共享)

6.直接內存(線程共享)


JVM執行子系統

1.Class類文件結構

  • 1.1 Java跨平台的基礎
  • 1.2 Class類的本質

2.字節碼指令

  • 2.1加載和存儲指令
  • 2.2運算或算術指令
  • 2.3類型轉換指令
  • 2.4創建類實例的指令:
  • 2.5創建數組的指令:
  • 2.6訪問欄位指令:
  • 2.7數組存取相關指令
  • 2.8檢查類實例類型的指令:
  • 2.9操作數據管理指令
  • 2.10控制轉移指令
  • 2.11方法調用指令
  • 2.12方法返回指令
  • 2.13異常處理指令
  • 2.14同步指令

3.類加載機制

4.類加載器

  • 4.1系統的類加載器
  • 4.2雙親委派模型

5.Tomcat類加載機制

6.方法調用詳解

  • 6.1解析
  • 6.2靜態分派
  • 6.3動態分派
  • 6.4基於棧的字節碼解釋執行引擎


垃圾回收器和內存分配策略

1.Java中是值傳遞還是引用傳遞?

2.引用類型

3.基本垃圾回收算法

  • 3.1按照基本回收策略分
  • 3.2按分區對待的方式分
  • 3.3按系統線程分

4.分代處理垃圾

5.JAVA中垃圾回收GC的類型


編寫高效優雅Java程序

1、面向對象

  • 1.1構造器參數太多怎麼辦?
  • 1.2不需要實例化的類應該構造器私有
  • 1.3不要創建不必要的對象
  • 1.4避免使用終結方法
  • 1.5使類和成員的可訪問性最小化
  • 1.6使可變性最小化
  • 1.7複合優先於繼承
  • 1.8接口優於抽象類

2.方法

  • 2.1可變參數要謹慎使用
  • 2.2返回零長度的數組或集合,不要返回null
  • 2.3優先使用標準的異常

3.通用程序設計


關注後私信回復【架構書籍】即可免費領取史上最全JVM實戰文檔

性能優化

1、常用的性能評價測試指標

1.1響應時間

1.2並發數

1.3吞吐量

2、常用的性能優化手段

2.1避免過早優化

2.2進行系統性能測試

2.3尋找系統瓶頸,分而治之,逐步優化

2.4前端優化常用手段

  • 2.4.1瀏覽器/App
  • 2.4.2 CDN加速
  • 2.4.3反向代理緩存
  • 2.4.4 WEB組件分離

3、應用服務性能優化

3.1緩存

  • 3.1.1緩存的基本原理和本質
  • 3.1.2合理使用緩衝的準則
  • 3.1.3分布式緩存與一致性哈希

3.2異步

  • 3.2.1同步和異步,阻塞和非阻塞
  • 3.2.2常見異步的手段

3.3集群

3.4應用相關

  • 3.4.1代碼級別
  • 3.4.2並發編程
  • 3.4.3資源的復用
  • 3.4.4 JVM
  • 3.4.5 GC調優
  • 3.4.6調優實戰
  • 3.4.7存儲性能優化

關注後私信回復【架構書籍】即可免費領取史上最全JVM實戰文檔

第一部分


第二部分


第三部分


第四部分


第五部分


​ 總目錄


​關注後私信回復【架構書籍】即可免費領取史上最全JVM實戰文檔

關鍵字: