天天看點

java虛拟機

jvm規範:定義了

        ---Class檔案類型

        ---運作時資料

        ---幀棧

        ----虛拟機的啟動

        ----虛拟機的指令集

java虛拟機

vm指令集:類型轉換,出棧入棧操作,運算,流程控制,函數調用。

jvm需要對java Library提供以下支援:

--反射java.lang.reflect

--ClassLoader

--初始化class和interface

--安全相關 java.security

--多線程

--弱引用

 jvm編譯:javap進行反彙編

jvm啟動的流程:在目前路徑和系統版本找jvm.cfg檔案,根據配置找到JVM.dll,初始化JVM虛拟機獲得JNIEnv接口,找到main方法開始運作。

java虛拟機

jvm基本結構:

  pc寄存器:

每個線程擁有一個pc寄存器。

線上程建立時建立。

指向下一條指令的位址。

執行本地方法時,pc的值為undefined。

方法區:

儲存裝載的類資訊,通常和永久區關聯在一起。

類型的常量池

字段,方法資訊

方法位元組碼

java堆:

和程式開發密切相關,new出來的對象都在這裡。

應用系統對象都儲存在java堆中。

所有線程共享java堆。

對分代GC來說,堆也是分代的。

GC主要工作是區間。

java棧:

線程私有。

棧由一系列幀組成(是以棧也叫幀棧)

棧儲存一個方法的局部變量,炒作數棧,常量池指針。

每一次方法調用建立一個幀,并壓棧。

java虛拟機

 棧上配置設定:

java虛拟機

 記憶體模型:

每個線程有一個工作記憶體和主存獨立

工作記憶體存放主存中變量值得拷貝

java虛拟機

線程共享:

java虛拟機

線程總是在自己的本地記憶體中存儲變量,本地記憶體存儲共享記憶體變量的一個副本,共享記憶體在主存當中的,共享變量存在時延和誤差。

指令重排原則:

 jvm參數設定:

-Xmx20m -Xms20m -Xmn15m  -XX:+PrintGCDetails -Xloggc:log/gc.log

設定jvm參數并且将參數輸出到檔案目錄:

java虛拟機

JVM中的新生代和老年代(Eden空間、兩個Survior空間)

上一篇: Java虛拟機
下一篇: java虛拟機