JVM的學習筆記

1、JVM的啓動和終止

當咱們調用Java命令運行某個Java程序時,該命令將會啓動一個Java虛擬機進程,無論該Java程序有多麼複雜,該程序啓動的全部線程,全部變量都處於該Java虛擬機進程裏,它們都使用該JVM進程的內存區。當系統出現如下幾種狀況時,JVM進程將被終止。java

  1. 程序運行到最後正常結束;
  2. 程序運行到使用System.exit()代碼處結束程序;
  3. 程序運行過程當中遇到未捕獲的異常或者錯誤而結束;
  4. 程序所在的平臺強制結束了JVM進程。

2、類的加載、鏈接和初始化

一、類的加載

類的加載指的是將類的.class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法區內,而後在堆區建立一個java.lang.Class對象,用來封裝類在方法區內的數據結構。程序員

不管類的示例有多少個,該類的Class對象只有一個,且經過查看源碼知道,Class的構造方法爲私有的,只有JVM才能建立該對象。安全

/*
     * Constructor. Only the Java Virtual Machine creates Class
     * objects.
     */
    private Class() {}

加載.class文件的方式:從本地系統中直接加載本身編譯後的.class文件或者從zip,jar等歸檔文件中加載.class文件數據結構

類的加載的最終產品是位於堆區中的Class對象,Class對象封裝了類在方法區內的數據結構,而且向Java程序員提供了訪問方法區內的數據結構的接口spa

類加載器的分類:線程

Java虛擬機自帶的加載器code

  1. 根類加載器(Bootstrap)
  2. 擴展類加載器(Extension)
  3. 系統類加載器(System)

用戶自定義的類加載器對象

  1. java.lang.ClassLoader的子類

類加載器並不須要等到某個類被「首次主動使用」時再加載它,JVM規範容許類加載器在預料某個類將要被使用時就預先加載它,若是在預先加載的過程當中遇到了.class文件缺失或存在錯誤,類加載器必須在程序首次主動使用該類時才報告錯誤(LinkageError錯誤),若是這個類一直沒有被程序主動使用,那麼類加載器就不會報告錯誤。blog

二、類的鏈接

類被加載後,就進入鏈接階段。鏈接就是將已經讀入到內存的類的二進制數據合併到虛擬機的運行時環境中去。接口

類的驗證:

  1. 類文件的結構檢查
  2. 語義檢查
  3. 字節碼驗證
  4. 二進制兼容性的驗證

類的準備

類的解析

 類的初始化

類的初始化步驟

 

 

 

 

類的加載器機制

類加載器用來把類加載到Java虛擬機中。類的加載機制採用父親委託機制,這種機制能更好的保證Java平臺的安全。

在此機制中,除了Java虛擬機自帶的根類加載器之外,其他的類的加載器都有且只有一個父加載器。

相關文章
相關標籤/搜索