JVM學習之對象訪問模式

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_34560242/article/details/80999496

Java對象訪問模式

一、引用數據類型

Java的引用數據類型是最爲重要的數據處理模型,而整個的引用數據類型處理數據的時候會牽扯到:堆內存、棧內存、方法區。

以一個最簡單的程序爲主:實例化一個Object類對象

Object obj = new Object();
  • “Object obj”:描述的是在棧內存之中,保存的有堆內存的引用。嚴格來說,這個數據會保存在本地變量表中。
    表中會描述到底有哪個對象,這個對象對應是哪個棧內存,棧內存以對應某個堆內存,這也是爲什麼Java中變量名不允許重名的原因。如果變量表重名了,就無法準確定位對象了。
  • “new Object()”:一個真正的保存在堆內存中的對象。

直觀思路下的引用操作:

  • 1、新定義的對象的名稱保存在本地變量表中,而後在這塊區域保存的是與之對應的棧內存。
  • 2、通過變量表中的棧內存地址可以找到堆內存。
  • 3、然後利用堆內存的對象進行本地方法的調用(方法區)。

對於引用數據類型的訪問實際上有兩種模式:

  • 1、通過句柄訪問
    • 先確定對象位置,再通過對象找到類型,再通過類型找到操作方法。
    • 好處:連接穩定,能保證對象真實存在,都會執行操作。
      這裏寫圖片描述
  • 2、直接通過指針訪問(Java中目前使用的模式)
    • 堆內存裏面不再需要保存句柄,而直接保存具體的對象。相當於省略了句柄到對象間的查找,而後這個對象可以直接進行Java方法區的調用。
    • 好處:更高效。
      這裏寫圖片描述

總結:引用數據類型在HotSpot中都是直接進行的引用處理,沒有句柄概念。

二、HotSpot虛擬機模式

  • 1、混合模式

    $ java -version
    
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
  • 2、純解釋模式

    $ java -Xint -version
    
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, interpreted mode)
  • 2、純編譯模式

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

實際上現在的JDK的設計都已經開始爲服務器而準備了。JVM啓動有兩種模式:

  • “-server”:服務器模式,佔用內存大、啓動速度慢,默認啓動模式。
  • “-client”:本地單機運行程序模式,啓動速度快。

找到JDK安裝目錄找到此文件:C:\Program Files\Java\jdk1.8.0_131\jre\lib\amd64\jvm.cfg 可以看到

-server KNOWN
-client IGNORE

想要使用 -client 模式除更改jvm.cfg文件外,還要創建一個與之對應的配置文件夾,參照默認的 -server 模式:
C:\Program Files\Java\jdk1.8.0_131\jre\bin\server,此文件夾下有三個文件。

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