類載入
程式執行過程
從原始檔建立到程式執行,Java程式要經過兩大步驟:編譯,執行
編譯: 建立完源程式(*.java檔案)後,程式會被Java編譯器通過javac.exe命令編譯為.class檔案。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用。
執行:java類執行的過程大概可分為兩個過程:
類的載入;
執行。
類載入
java程式經過編譯後形成*.class檔案。位元組碼檔案通過java.exe命令通過類載入器將位元組碼檔案對應的類載入到記憶體中。
當程式主動使用某個類的時候,如果該類還未被載入到記憶體中,則系統會通過三個步驟完成對該類的初始化,這三個步驟何在一起,泛泛講稱為類的載入,細講的話,看作第一步驟
類的載入:比如說Person類,通過java.exe命令將此類位元組碼檔案載入到記憶體,並建立一個Class例項,此過程由類的載入器完成
類的連結:將類的二進位制資料合併到JRE中。將類中宣告為static的變數設定預設初始值。比如說類中有變數static int n ,在此連結過程中將n賦值為0
類的初始化:JVM負責對類進行初始化。如果定義時給變數n顯式賦了個值2,那麼在初始化環節,會將n的值有2覆蓋0。初始化中有個類構造器方法,不是之前建立類時的構造器,作用是將靜態變數有顯式值的話,做個初始化操作
public class ClassLoadingTest {
public static void main(String[] args) {
System.out.println(A.m); //100
}
}
class A{
static {
m = 300;
}
static int m = 100;
}
/**
1.首先將類A位元組碼載入到記憶體中,產生一個Class例項,對應方法區中的某一區域
2.連結,將類變數賦值為0
3.初始化,由構造器方法來完成,A的構造器方法由類變數的賦值和講臺程式碼塊中的語句按照順序合併產生
m = 300;
m = 100;
靜態程式碼塊和顯式賦值看誰先出現先賦值
*/
ClassLoader 類載入器
類載入器是用來將類裝載進記憶體的
對於自定義類,使用系統類載入器進行載入;
呼叫系統類載入器的getparent(),能獲取擴充套件類載入器;
呼叫擴充套件類載入器的getparent(),無法獲取引導類載入器;
引導類載入器主要負責載入java的核心類庫,我們無法獲取到
@Test
public void test(){
ClassLoader classLoader = ClassLoadingTest.class.getClassLoader();
System.out.println(classLoader);
ClassLoader loaderParent = classLoader.getParent();
System.out.println(loaderParent);
ClassLoader parent = loaderParent.getParent();
System.out.println(parent);
}
結果展示:
sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@54bedef2
null
相關文章
- 類載入流程,類載入機制及自定義類載入器
- 探祕類載入器和類載入機制
- 類與類的載入
- jvm類載入JVM
- [JVM]類載入JVM
- 自定義類載入器驗證類載入機制
- 類載入-載入時機學習
- 類檔案的結構、JVM 的類載入過程、類載入機制、類載入器、雙親委派模型JVM模型
- 虛擬機器類載入機制:類載入時機虛擬機
- JVM入門--類載入器JVM
- JVM 之類載入JVM
- 類載入機制
- flink 類載入剖析
- 類載入器(JVM)JVM
- 類載入過程
- JVM-類載入JVM
- 虛擬機器類載入機制_類載入的過程虛擬機
- 【JVM進階之路】十四:類載入器和類載入機制JVM
- php 自動類載入類 composer.json 實現自動載入PHPJSON
- ClassLoader類載入分析(一)
- Java jvm 類載入 反射JavaJVM反射
- 類的載入機制
- JVM:類載入機制JVM
- JVM類載入機制JVM
- Java動態載入類Java
- 類的載入時機
- JVM類載入過程JVM
- 類載入子系統
- java類載入機制Java
- 虛擬機器類載入機制_類載入時機和類的生命週期虛擬機
- 【JVM第2課】類載入子系統(類載入器、雙親委派)JVM
- Java基礎-類載入器以及載入機制Java
- JVM效能最佳化 —— 類載入器,手動實現類的熱載入JVM
- Java類載入器詳解Java
- JVM之類載入器ClassLoaderJVM
- 類載入機制總結
- java類的載入過程Java
- Java父子類載入順序Java