JVM知識整理

2、JVM

1. Java內存結構
  1. 線程私有的:
  • 程序計數器(當前線程所執行的字節碼的行號指示器)
  • 虛擬機棧(每次方法調用的數據都是經過棧傳遞的。局部變量表/對象引用/實例方法)
  • 本地方法棧(有一個native關鍵字修飾,並且不存在方法體,這種用native修飾的方法就是本地方法)
  1. 線程共享的
  • 堆(棧管運行,堆管存儲,堆是垃圾收集器管理的主要區域)java

  • 方法區(存放類的元數據信息,常量和靜態變量)算法

  • 直接內存(非運行數據區的一部分)緩存

2. Java內存模型
  1. 概念

Java內存模型(Java Memory Model,JMM)是java虛擬機規範定義的,工做內存和主內存。Java內存模型中規定全部變量都存儲在主內存,主內存是共享內存區域,全部線程均可以訪問,服務器

但線程對變量的操做(讀取賦值等)必須在工做內存中進行,首先要將變量從主內存拷貝的本身的工做內存空間,而後對變量進行操做,操做完成後再將變量寫回主內存,不能直接操做主內存中的變量,工做內存中存儲着主內存中的變量副本拷貝markdown

  1. volatie函數

    • 保證可見性
    • 不保證原子性
    • 禁止指令重排(保證有序性)
  2. 總線嗅探機制優化

    每一個處理器經過嗅探在總線上傳播的數據來檢查本身的緩存值是否是過時了spa

3. 對象的建立過程

類加載檢查 -> 分配內存(執行碰撞/空閒列表) -> 初始化零值 -> 設置對象頭 -> 執行 init 方法線程

4. 類加載過程

類加載過程:加載->鏈接->初始化。鏈接過程又可分爲三步:驗證->準備->解析code

5. 類加載器&雙親委派模型介紹
  1. 加載器
  • BootstrapClassLoader(啓動類加載器)

  • ExtensionClassLoader(擴展類加載器)

  • AppClassLoader(應用程序類加載器)

  • 自定義加載器

  1. 雙親委派

每個類都有一個對應它的類加載器。系統中的 ClassLoder 在協同工做的時候會默認使用 雙親委派模型 。即在類加載的時候,系統會首先判斷當前類是否被加載過。已經被加載的類會直接返回,不然纔會嘗試加載。加載的時候,首先會把該請求委派該父類加載器的 loadClass() 處理,所以全部的請求最終都應該傳送到頂層的啓動類加載器 BootstrapClassLoader 中。當父類加載器沒法處理時,才由本身來處理。當父類加載器爲null時,會使用啓動類加載器 BootstrapClassLoader 做爲父類加載器。

  1. 雙親委派優勢
  • 能夠避免類的重複加載
  • 好比咱們編寫一個稱爲 java.lang.Object 類的話,那麼程序運行的時候,系統就會出現多個不一樣的 Object 類。
6. GC調優策略
  1. GC 調優原則;

    多數的 Java 應用不須要在服務器上進行 GC 優化; 多數致使 GC 問題的 Java 應用,都不是由於咱們參數設置錯誤,而是代碼問題; 在應用上線以前,先考慮將機器的 JVM 參數設置到最優(最適合); 減小建立對象的數量; 減小使用全局變量和大對象; GC 優化是到最後不得已才採用的手段; 在實際使用中,分析 GC 狀況優化代碼比優化 GC 參數要多得多。

  2. GC 調優目的;

    將轉移到老年代的對象數量下降到最小; 減小 GC 的執行時間。

  3. GC 調優策略;

    • 將新對象預留在新生代
    • 大對象進入老年代
    • 合理設置進入老年代對象的年齡
    • 設置穩定的堆大小,堆大小設置有兩個參數
7. GC Roots的對象分爲如下幾種
  1. 虛擬機棧(棧幀中的本地方法表)中引用的對象(局部變量)
  2. 方法區中靜態變量所引用的對象(靜態變量)
  3. 方法區中常量引用的對象
  4. 本地方法棧(即native修飾的方法)中JNI引用的對象(JNI是Java虛擬機調用對應的C函數的方式,經過JNI函數也能夠建立新的Java對象。且JNI對於對象的局部引用或者全局引用都會把它們指向的對象都標記爲不可回收)
  5. 已啓動的且未終止的Java線程
8. 垃圾回收算法

標記清除,複製,標記整理和分代收集算法

9. 引用的幾種類型

強引用、軟引用、弱引用、虛引用

10. 解決服務器OOM問題
  1. top命令
  2. jstack命令 jstack pid查看線程的堆棧信息
  3. Arthas,CPU 爲何起飛了 thread(redifine/jad)
  4. 結合應用報錯追蹤平臺(cat),一些heartbeat的GC info,JVM heap info等
相關文章
相關標籤/搜索