Java虛擬機Java Virtual Machine(JVM)總結(基於jdk 1.8)

1、什麼是JVM

JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。Java虛擬機包括一套字節碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域。 JVM屏蔽了與具體操作系統平臺相關的信息,使Java程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。JVM在執行字節碼時,實際上最終還是把字節碼解釋成具體平臺上的機器指令執行。

1.1、JVM原理

JVM是java的核心和基礎,在java編譯器和os平臺之間的虛擬處理器。它是一種利用軟件方法實現的抽象的計算機基於下層的操作系統和硬件平臺,可以在上面執行java的字節碼程序。

1.2、JVM虛擬機結構

     

  • 程序計數器:指向當前線程正在執行的字節碼指令的地址。
  • 虛擬機棧:存儲當前線程運行方法所需要的數據、指令、返回地址。虛擬機

虛擬機棧是線程私有的,每個線程創建的同時都會創建JVM棧,JVM棧中存放的爲當前線程中局部基本類型的變量(java中定義的八種基本類型:boolean、char、byte、short、int、long、float、double)、部分的返回結果以及Stack Frame,非基本類型的對象在JVM棧上僅存放一個指向堆上的地址。

  • 本地方法棧:JVM採用本地方法堆棧來支持native方法的執行,此區域用於存儲每個native方法調用的狀態。
  • 方法區:類的信息、常量,靜態變量,JIT(動態代理)。
  • 堆(Heap):它是JVM用來存儲對象實例以及數組值的區域,可以認爲Java中所有通過new創建的對象的內存都在此分配,Heap中的對象的內存需要等待GC進行回收。

         堆的劃分(劃分):新生代{  Eden、Survivor0(S0)、Survivor1(S1)}、老年代、元空間。

         元空間(Metaspace):元空間取代了1.7版本及以前的永久代。元空間和永久代本質上都是方法區的實現。方法區存放虛擬機加載的類信息,靜態變量,常量等數據。元空間是可擴容的類似ArryList集合

爲什麼要將堆分成這麼多個模塊,是爲了提高空間利用率,便於GC垃圾回收。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章