002. 深刻JVM學習—JVM對象訪問模式

1. Object obj = new Object(); 分析


  1. Object obj:描述的是保存在棧內存之中,然後保存有堆內存的引用,這個數據會保存在本地變量表中(變量表描述有哪些對象,保存對象棧的位置,棧對應着堆內存地址,因此這也是java變量不容許重名的緣由)java

  2. new Object():一個真正的對象,保存在堆內存之中。ui

  3. 直觀操做3d

    • 新定義的對象名稱保存到本地變量表中,然後在這塊區域中須要肯定與之對應的棧內存空間。
    • 經過變量表中的棧地址能夠找到堆內存。
    • 利用堆內存的對象進行本地方法的調用(方法區)。

2. 訪問引用類型數據的模式


  1. 經過句柄訪問(鏈接最穩定)指針

    句柄訪問

  2. Java經過直接指針訪問——HotSpot虛擬機code

    • Java中使用的是對象保存模式,也就是說堆內存中不須要保存句柄,而直接保存具體的對象。省略了句柄到對象間的查找。然後這個對象能夠直接進行Java方法區的調用。

    Java運行流程圖

3. JVM歷史簡介


  1. 三種JVM對象

    • SUN公司最先改良的HotSpot
    • BEA公司的JRockit
    • IBM JVM's
  2. Oracle收購了SUN和BEA以後,獲得了業內的兩個虛擬機版本。blog

4. 範例


  1. 取得當前的JVM版本內存

    java -version
    java version "1.8.0_171"
    Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
    • mixed mode:所謂的混合模式就是適合於編譯和執行。
  2. 使用純解釋模式啓動虛擬機

    java -Xint -version
    java version "1.8.0_171"
    Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, interpreted mode)
  3. 使用純編譯模式啓動it

    java -Xcomp -version
    java version "1.8.0_171"
    Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, compiled mode)

5. 總結


  • 引用數據類型在HotSpot中都是直接進行的引用處理,沒有句柄池的概念。
相關文章
相關標籤/搜索