Java程式設計技術之淺析JVM記憶體

琥珀碼客發表於2020-06-08

JVM

JVM->Java Virtual Machine:Java虛擬機器,是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。

file

基本認知:

  • 1.JVM是用於執行Java程式碼的假象計算機,主要有一套位元組碼指令集,一組暫存器,一個棧,一個垃圾回收,堆 和 一個儲存方法域。
  • 2.JVM執行在作業系統之上,與硬體沒有直接的互動。

Java程式執行過程:
file

  • 1.編譯->原始檔由編譯器編譯成位元組碼[ByteCode]

Java 原始檔—->編譯器—->位元組碼檔案

  • 2.執行->位元組碼由java虛擬機器解釋執行

位元組碼檔案—->JVM—->機器碼

Java類的載入步驟:

  • 1.載入->主要是完成3個階段的提交:

通過類的全限定名來獲取定義類的二進位制位元組流
將位元組流所代表的靜態儲存結構轉化為方法區的執行時資料結構
在記憶體中生成一個代表這個類的java.lang.Class物件,作為方法區這個類的各種資料的訪問入口。

  • 2.驗證->四個階段的檢驗動作:

檔案格式驗證
後設資料驗證
位元組碼驗證
符號引用驗證

  • 3.準備->為類變數(static)分配記憶體並設定類變數的初始值。
  • 4.解析->將常量池內的符號引用轉為直接的引用
  • 5.初始化->按照static塊和static變數在檔案中的出現順序,合併到()方法中。例項變數由()函式賦值。

JVM執行緒實體:

JVM執行緒->程式執行過程中的一個執行緒實體,JVM 允許一個應用併發執行多個執行緒。

從此,我們應該意識到,在Java中,當提到執行緒就應該是指JVM執行緒和Java執行緒。其中JVM執行緒指的是Hotspot JVM 後臺執行的系統執行緒,而且Hotspot JVM 中的 Java 執行緒與原生作業系統執行緒有直接的對映關係。

⚠️[注意事項]:
[1].當執行緒本地儲存、緩衝區分配、同步物件、棧、程式計數器等準備好以後,就會建立一個作業系統原生執行緒。
[2].Java 執行緒結束,原生執行緒隨之被回收。作業系統負責排程所有執行緒,並把它們分配到任何可用的 CPU 上。
[3].當原生執行緒初始化完畢,就會呼叫 Java 執行緒的 run() 方法。當執行緒結束時,會釋放原生執行緒和 Java 執行緒的所有資源

特別需要知道的是,Hotspot JVM 後臺執行的系統執行緒主要是:

  • 虛擬機器執行緒->VM thread:等待 JVM 到達安全點操作出現。這些操作必須要在獨立的執行緒裡執行,因為當堆修改無法進行時,執行緒都需要 JVM 位於安全點。這些操作的型別有:stop-theworld垃圾回收、執行緒棧 dump、執行緒暫停、執行緒偏向鎖(biased locking)解除。
  • 週期性任務執行緒->負責定時器事件(也就是中斷),用來排程週期性操作的執行
  • GC執行緒->支援 JVM 中不同的垃圾回收活動
  • 編譯器執行緒->在執行時將位元組碼動態編譯成本地平臺相關的機器碼
  • 訊號分發執行緒->程接收傳送到 JVM 的訊號並呼叫適當的 JVM 方法處理

JVM記憶體

file

版權宣告:本文為博主原創文章,遵循相關版權協議,如若轉載或者分享請附上原文出處連結和連結來源。

相關文章