JVM快速入門

JVM的位置

在這裏插入圖片描述

JVM的體系結構

  • 程序計數器即PC寄存器

在這裏插入圖片描述在這裏插入圖片描述

類加載器及雙親委派機制

在這裏插入圖片描述

  • 作用:加載class文件。
  • 級別:
    • 1、虛擬機自帶的加載器
    • 2、啓動類(根)加載器(rt-jar)
    • 3、擴展類加載器(jre目錄下–lib–ext)
    • 4、應用程序加載器(AppClassLoader)
  • 雙親委派機制
    • 1、類加載器收到類加載的請求
    • 2、先將這個請求向上委託給父類加載器去完成,一直向上委託,直到根加載器
    • 3、啓動類加載器檢查是否能夠加載當前類,能加載就結束,使用當前加載器,否則,拋出異常,通知子加載器進行加載
    • 4、重複步驟3
      • 注意:往上調用會遇到null,代表java調用不到,底層是用C/C++來寫的;
      • native關鍵字:修飾方法即爲本地方法,代碼構成爲C/C++(例如線程相關方法,java處理不了線程,用C/C++進行方法編寫,用native關鍵字修飾。)
      • java爲什麼叫C++ --:對C++語言中指針、內存管理進行升級優化而來。

沙箱安全機制

  • 安全管理、權限控制

native、方法區

  • 凡是帶了native關鍵字的,說明java的作用範圍達不到了,會去調用底層C語言的庫。
  • 會進入本地方法棧,登記native方法。
  • 真正執行的時候,通過本地方法接口(JNI)執行。
    • 產生原因:java誕生之初C/C++橫行,想要立足,必須要有調用C/C++的程序。
    • 作用:擴展Java的使用,融合不同的編程語言爲java使用。以及操作硬件。
    • 例如java程序驅動打印機,管理系統,native在企業開發中較爲少見。
  • 方法區存放:static(靜態變量)、final(常量)、Class(類信息)、常量池

  • 本質是:數據結構;
  • 程序=算法+數據結構;(非框架+業務邏輯)
  • 棧:先進後出,後進先出;隊列:先進先出(FIFO),喝多了吐就是棧,吃多了拉就是隊列。
  • 棧內存主管程序的運行,生命週期和線程同步。線程結束,棧內存也即釋放,對於棧來說,不存在垃圾回收的問題,一旦線程結束,棧也就結束了。
  • 棧內存放:8大基本類型+對象引用+實例的方法。

  • Heap:一個JVM只有一個堆內存,堆內存的大小是可以調節的。
    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述元空間:邏輯上存在,物理上不存在。

使用JProfiler工具分析OOM原因

在這裏插入圖片描述

GC算法

  • 引用計數法
  • 複製算法
    • 好處:沒有內存碎片
    • 壞處:浪費部分內存空間,to區永遠爲空;
    • 最佳使用場景:對象存活度較低的區域。
      在這裏插入圖片描述
  • 標記清除算法
  • 標記壓縮算法
  • 總結:
    • 內存效率:複製算法>標記清除算法>標記壓縮算法
    • 內存整齊度:複製算法= 標記壓縮算法 > 標記清除算法
    • 內存利用率:標記壓縮算法>標記清除算法>複製算法
  • GC分代收集算法:
    • 年輕代(存活率低):複製算法
    • 老年代(區域大,存活率高):標記清除+標記壓縮混合實現

JMM

  • JAVA Memory Model(JAVA內存模型)
  • 作用:jvm對應於物理機,jmm對應於緩存一致性協議,用於定義數據讀寫的規則。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章