Java編程技術之淺析JVM內存

JVM

JVM->Java Virtual Machine:Java虛擬機,是一種用於計算設備的規範,它是一個虛構出來的計算機,是經過在實際的計算機上仿真模擬各類計算機功能來實現的。java

file

基本認知:安全

  • 1.JVM是用於運行Java代碼的假象計算機,主要有一套字節碼指令集,一組寄存器,一個棧,一個垃圾回收,堆 和 一個存儲方法域。
  • 2.JVM運行在操做系統之上,與硬件沒有直接的交互。

Java程序執行過程:
file數據結構

  • 1.編譯->源文件由編譯器編譯成字節碼[ByteCode]

Java 源文件—->編譯器—->字節碼文件併發

  • 2.運行->字節碼由java虛擬機解釋運行

字節碼文件—->JVM—->機器碼jvm

Java類的加載步驟:函數

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

經過類的全限定名來獲取定義類的二進制字節流
將字節流所表明的靜態存儲結構轉化爲方法區的運行時數據結構
在內存中生成一個表明這個類的java.lang.Class對象,做爲方法區這個類的各類數據的訪問入口。操作系統

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

文件格式驗證
元數據驗證
字節碼驗證
符號引用驗證線程

  • 3.準備->爲類變量(static)分配內存並設置類變量的初始值。
  • 4.解析->將常量池內的符號引用轉爲直接的引用
  • 5.初始化->按照static塊和static變量在文件中的出現順序,合併到 ()方法中。實例變量由 ()函數賦值。

JVM線程實體:3d

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

相關文章
相關標籤/搜索