java編程——深入理解jvm內存模型

一:java虛擬機的體系結構圖:

java編程——深入理解jvm內存模型

體系結構圖

jvm : 中文名稱叫Java虛擬機,它是由軟件技術模擬出計算機運行的一個虛擬的計算機。我們都知道Java的程序需要經過編譯後,產生.Class文件,JVM才能識別並運行它,JVM針對每個操作系統開發其對應的解釋器,所以只要其操作系統有對應版本的JVM,那麼這份Java編譯後的代碼就能夠運行起來,這就是Java能一次編譯,到處運行的原因。簡單來說就是夠運行Java字節碼的虛擬機。

Java編譯器: 將Java源文件(.java文件)編譯成字節碼文件(.class文件,是特殊的二進制文件,二進制字節碼文件),這種字節碼就是JVM的“機器語言”。javac.exe可以簡單看成是Java編譯器。

類加載器: Java類加載器(Java Classloader)是Java運行時環境(Java Runtime Environment)的一部分,負責動態加載Java類到java虛擬機的內存空間中。

執行引擎: 通過類裝載器裝載的,被分配到JVM的運行時數據區的字節碼會被執行引擎執行。執行引擎以指令為單位讀取Java字節碼。它就像一個CPU一樣,一條一條地執行機器指令。每個字節碼指令都由一個1字節的操作碼和附加的操作數組成。執行引擎取得一個操作碼,然後根據操作數來執行任務,完成後就繼續執行下一條操作碼。可以有

解釋器執行編譯執行 兩種選擇,輸入的是字節碼文件,處理過程是字節碼解析的等效過程,輸出的是執行結果。

1、解釋器

一條一條地讀取,解釋並且執行字節碼指令。因為它一條一條地解釋和執行指令,所以它可以很快地解釋字節碼,但是執行起來會比較慢。這是解釋執行的語言的一個缺點。字節碼這種“語言”基本來說是解釋執行的。

  • 程序啟動時首先發揮作用,解釋執行Class字節碼;
  • 省去編譯時間,加快啟動速度;
  • 但執行效率較低;

2、JIT編譯器(jvm即時編譯器)

即時編譯器被引入用來彌補解釋器的缺點。執行引擎首先按照解釋執行的方式來執行,然後在合適的時候,即時編譯器把整段字節碼編譯成本地代碼。然後,執行引擎就沒有必要再去解釋執行方法了,它可以直接通過本地代碼去執行它。執行本地代碼比一條一條進行解釋執行的速度快很多。編譯後的代碼可以執行的很快,因為本地代碼是保存在緩存裡的。

  • 程序解釋運行後,JIT編譯器逐漸發揮作用;
  • 編譯成本地代碼,提高執行效率;
  • 但佔用程序運行時間、內存等資源;

不過,用JIT編譯器來編譯代碼所花的時間要比用解釋器去一條條解釋執行花的時間要多。因此,如果代碼只被執行一次的話,那麼最好還是解釋執行而不是編譯後再執行。因此,內置了JIT編譯器的JVM都會檢查方法的執行頻率,如果一個方法的執行頻率超過一個特定的值的話,那麼這個方法就會被編譯成本地代碼。

二:運行是數據區結構圖:

java編程——深入理解jvm內存模型

內存區域

java堆 : java堆是jvm內存管理中最大的一塊,線程共享。在jvm啟動的時候創建。此區域唯一目的就是存放對象實例,幾乎所有的對象實例都在這裡分配內存。Sun JDK從1.2開始對堆採用了分代管理,分為 新生代與老年代

方法區: 線程共享,是用來存儲已被JVM加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。

虛擬機棧: JVM棧是線程私有的,它的生命週期與線程相同。JVM棧描述的是java方法執行的內存模型,每個方法在執行的同時都會創建一個棧幀,用於存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。每個方法從調用直至執行完成的過程,就對應著一個棧幀在虛擬機棧中入棧到出棧的過程。

本地方法棧: 本地方法棧和JVM棧非常相似,它們之間的區別不過是jvm棧是為執行java方法服務,而本地方法棧是為jvm使用到對的本地方法服務。

程序計數器: 程序計數器是一塊較小的內存空間,線程私有。它可以看作是當前線程所執行的字節碼的行號指示器。

直接內存: java的NIO庫允許java程序直接使用內存從而提高性能,通常直接內存速度會優於java堆。讀寫頻繁的場合可能會考慮使用。

運行時常量池(Runtime Constant Pool) : 它是 方法區 的一部分。Class文件中除了有類的版本、字段、方法、接口等描述等信息外,還有一項信息是常量池(Constant Pool Table),用於存放編譯期生成的各種字面量和符號引用,這部分內容將在類加載後存放到常量池中。

三、JVM基本原理介紹

jvm體系總體分四大塊:

  • 類的加載機制
  • jvm內存結構
  • GC算法 垃圾回收
  • GC分析 命令調優(更新中)
java編程——深入理解jvm內存模型


分享到:


相關文章: