一、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 等,資料庫 準備階段正式為類變數分配記憶體並設定變數的初始值。這些變數使用的記憶體都將在方法區中進行分配 這裡的初始值並...