JVM載入類知識點

2021-07-30 02:40:41 字數 1586 閱讀 2209

一、jvm類載入過程

二、jvm載入類的三種方式

1.通過new關鍵字載入

object example=new object();

2.通過classloader例項的loadclass方法載入

classloader loader = classloader.getsystemclassloader();

class exampleclass=loader.loadclass("example");

object example =exampleclass.newinstance();

3.通過class.forname載入

class exampleclass = class.forname("example");

object example =exampleclass.newinstance();

三、載入類三種方式的區別:

1. new關鍵字載入(第1種)和class.forname(第2種)載入使用的類載入器是是當前類載入器,即this.getclass.getclassloader。classloader(第3種)由使用者指定類載入器。如果需要在當前類路徑以外尋找類,則只能採用classloader方式;

2. 第1種載入方式為靜態載入,第2種和第3種載入方式為動態載入,即在執行時載入;

3. 第1、2載入方式將載入類的static內容,第3種方式不載入。因為第1、2種方式會一直執行至初始化(initialize)過程,而第3種方式執行裝載(load)過程後即終止,不完成鏈結和初始化過程。

classname)  原始碼  

public static class<?> forname(string classname) throws classnotfoundexception

//第二個引數是指class被loading後是不是必須被初始化。 不初始化就是不執行static的**即靜態**

實際上呼叫的是classloader.loadclass(name, false),第二個引數指出class是否被link。

例如:

//定義point類

public class point

}

//測試

public class classloadertest private static void loadertest() catch (exception e) }private static void fornametest() catch (exception e) }}

//執行結果:

//===測試classloader====:

//===測試forname====:

//point靜態內容

4. 靜態載入方式如果出現類沒有找到,將丟擲noclassdeffounderror,error的子類,而第2、3種方式將丟擲classnotfoundexception檢測異常(checked exception);

JVM記憶體模型知識點梳理

堆 用於存放物件。分為年輕代與老年代。區別在於年輕代用於存放生存週期較短的物件,而老年代一般則是由年輕代轉過來的。而年輕代中又分為eden區,s0區和s1區。物件剛剛建立時,一般存放在eden區,待eden區滿後,進行垃圾 存活下來的物件會放入s0區,同時生存週期 1,s0區滿後,進行垃圾 剩餘的物...

JVM 類載入機制

1 載入步驟 jvm 類載入機制分為五個部分 載入,驗證,準備,解析,初始化。2 類載入器 3 雙親委派 1 什麼是雙親委派?當乙個類收到了類載入請求,他首先把這個請求委派給父類去完成,每乙個層次類載入器都是如此,因此所有的載入請求都應該傳送到啟動類載入其中,只有當父類載入器反饋自己無法完成這個請求...

Jvm類載入機制

類載入的過程 類載入器 控制台列印輸出 主要分為以下三步 載入源包括很多種,如檔案 class檔案,jar檔案 網路 計算生成的乙個二進位製流 proxy 由其他檔案生成 jsp 等,資料庫 準備階段正式為類變數分配記憶體並設定變數的初始值。這些變數使用的記憶體都將在方法區中進行分配 這裡的初始值並...