《迪士尼:競速風暴》預告公佈 夏季登陸NS平臺
阿新 • • 發佈:2022-02-10
1、JVM 和 類
(1)執行java命令: java 帶有main方法的類名
■ 命令的作用:啟動jvm,並載入位元組碼
,執行程式
- 當呼叫java命令來執行某個java程式時,該命令將會啟動一個jvm程序(同一個jvm中的所有執行緒變數都處於處於同一個程序中,共享給jvm的記憶體區間。)
- 每次啟動一個程式,在工作管理員,就會出現一個程序
(2)jvm退出的情況(jvm程序一旦結束,該程序中記憶體中的資料會丟失
):
- 程式正常執行結束
- 使用System.exit(0) 方法
- 出現異常,沒有捕獲異常
- 平臺強制結束jvm程序(在工作管理員那裡關閉掉java程序)
2、類載入機制:
(1) 將類載入進記憶體中(三個步驟:載入、連線、初始化)
■ 當程式主動使用
到某個類時,若該類還沒有被載入進記憶體中
,則系統會通過載入、連線、初始化
三個步驟對該類就那些初始化操作。
- 在程式中,每次要用到某類,都是需要將該類載入進內容的(將類載入進記憶體包括了三個步驟:載入、連線、初始化)
- 解除安裝類:當虛擬機器停止工作的時候,該類就從虛擬機器中解除安裝了
類載入進虛擬機器的特點
:當類一旦載入進虛擬機器,就不解除安裝,永駐記憶體,直到虛擬機器停止工作。
(2) 類載入機制【載入、連線、初始化、使用、解除安裝】:
1)類的載入:是指將類的class檔案(位元組碼檔案)載入記憶體之中,併為之建立一個java.lang.Class物件【位元組碼物件
】
- 萬物皆物件,描述物件的類也是一種物件,我們使用java.lang.Class物件【位元組碼物件】來描述類這種物件。
□ 類的載入過程是由類載入器
(ClassLoader)完成,類載入器通常是由jvm提供的,我們稱之為系統類載入器,我們也可以自定類載入器(需要繼承ClassLoader類)
- 不同的類載入器可以實現載入本地位元組碼檔案,jar包中的位元組碼,通過網路載入位元組碼等等。
□ 為什麼已經有系統自帶的類載入器,還需要自定義的類載入器?(載入方式
不符合需求)
- 當我們使用框架時,需要載入配置檔案時,通過系統載入器的載入方式無法載入配置檔案,需要自定義類載入器,重新去定義載入方式。
2) 類的連線:當類被載入進記憶體之後,系統為之生產了一個對應的Class物件【位元組碼物件】,接著把類的二進位制資料合併到JRE中。
- 驗證:檢測被載入的類是否有正確的內部結構。
- 準備:負責為類的static變數分配記憶體,並設定預設值。
- 解析:把類的二進位制資料中的符號引用替換為直接引用。
3)類的初始化:在此階段,jvm負責對類進行初始化,主要就是對static變數進行初始化。
類的初始化包含如下幾個步驟:
- 當類還沒被載入和連線,則程式先載入並連線該類
- 當該類的父類還沒有被初始化,則先初始化其父類
- 當類中有初始化語句(靜態程式碼塊---
一般用來載入資源
),則系統依次執行這些初始化語句
✿ (3) 總結類的載入機制:
■ 程式需要執行某個類,需要將類載入進記憶體,系統為該類建立位元組碼物件,然後進行初始化,再使用,最後解除安裝。
■ 類載入進虛擬機器的特點
:當類一旦載入進虛擬機器,就不解除安裝,永駐記憶體,直到虛擬機器停止工作。