當(dāng)前位置:首頁 > IT技術(shù) > 其他 > 正文

概述類的加載器及類加載過程
2022-05-11 11:03:59


概述類的加載器及類加載過程_初始化

  • 類加載器子系統(tǒng)負(fù)責(zé)從文件系統(tǒng)或者網(wǎng)絡(luò)中加載Class文件,class文件在文件開頭?有特定的文件標(biāo)識。
  • ClassLoader只負(fù)責(zé)class文件的加載,至于它是否可以運(yùn)行,則由Execution Engine決定。
  • 加載的類信息存放于一塊稱為方法區(qū)的內(nèi)存空間。除了類的信息外,方法區(qū)中還會存放運(yùn)行時(shí)常量池信息,可能還包含字符串字面量(這部分常量信息是Class文件中常量池部分的內(nèi)存映射)

概述類的加載器及類加載過程_方法區(qū)_02

概述類的加載器及類加載過程_開發(fā)語言_03

類的加載過程

概述類的加載器及類加載過程_開發(fā)語言_04

概述類的加載器及類加載過程_方法區(qū)_05

加載?

1、通過一個(gè)類的全限定名獲取定義此類的二進(jìn)制字節(jié)流

2、將這個(gè)字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)

3、在內(nèi)存中生成一個(gè)代表這個(gè)類的 java.lang.Class 對象,作為方法區(qū)這個(gè)類的各種數(shù)據(jù)的訪問入口。

概述類的加載器及類加載過程_方法區(qū)_06

鏈接

概述類的加載器及類加載過程_初始化_07

初始化

概述類的加載器及類加載過程_開發(fā)語言_08

虛擬機(jī)保證一個(gè)類加載一次的代碼演示

package chapter01.com.wust.yq;

public class DeadThreadTest {

public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "開始");
//這一步的目的就是為了加載類
DeadThread dt = new DeadThread();
System.out.println(Thread.currentThread().getName() + "結(jié)束");
}
};

Thread t1 = new Thread(r, "線程1");
Thread t2 = new Thread(r, "線程2");

t1.start();
t2.start();
}

}

class DeadThread {
static {
System.out.println(Thread.currentThread().getName() + "初始化當(dāng)前類");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

結(jié)果展示?

概述類的加載器及類加載過程_初始化_09


本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >