【jvm】【01】加載類
標簽: jvm
1.類的結構
2.加載類的過程
2.1懶加載,使用的時候加載,加載方式的雙親委派
java.lang.ClassLoader
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized (getClassLoadingLock(name)) {
// First, check if the class has already been loaded
Class<?> c = findLoadedClass(name);
if (c == null) {
long t0 = System.nanoTime();
try {
if (parent != null) {
c = parent.loadClass(name, false);
} else {
c = findBootstrapClassOrNull(name);
}
} catch (ClassNotFoundException e) {
// ClassNotFoundException thrown if class not found
// from the non-null parent class loader
}
if (c == null) {
// If still not found, then invoke findClass in order
// to find the class.
long t1 = System.nanoTime();
c = findClass(name);
// this is the defining class loader; record the stats
sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
sun.misc.PerfCounter.getFindClasses().increment();
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
}
2.2加載到類后,執行 校驗-準備-解析-初始化
校驗
檢查class文件格式是否正確
準備
類變量分配空間
類變量設置默認值
解析
把方法的符號引用變成靜態引用
初始化
給類變量賦值,調用靜態代碼塊
智能推薦
JVM 類加載機制
文章目錄 1.類加載過程 1.1.加載 1.2.驗證 1.3.準備 1.4.解析 1.5.初始化 1.6.使用 1.7.卸載 2.實戰 參考 1.類加載過程 Class 文件需要加載到虛擬機中之后才能運行和使用,那么虛擬機是如何加載這些 Class 文件呢? 系統加載 Class 類型的文件主要三步:加載->連接->初始化。連接過程又可分為三步:驗證->準備->解析。 在開...
【JVM】類加載機制
一、類加載過程 1. 裝載(Load) 通過一個類的全限定名 獲取定義此類的二進制字節流 將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構 在Java堆中生成一個代表這個類的 java.lang.Class對象,作為對該方法區中這些數據的訪問入口 2.鏈接(Link) 驗證(Verify) 文件格式驗證 元數據驗證 字節碼驗證 符號引用驗證 準備(Prepare) 為靜態類分配內存,并...
【JVM】---- 類加載機制
目錄 1. 類加載過程 2. 類加載器 一、類加載過程 1. 類加載過程: 分為三步:加載->連接->初始化 其中連接過程分為: 驗證->準備->解析 圖示 1.1 什么時候開始類的初始化? (1)最常見的Java代碼場景: &n...
JVM -- 類加載器
jvm雙親委托 java雙親委托模型的好處 1.可以確保java核心庫的類型安全,所有的java應用都至少會引用java.lang.object類,也就是說在運行期,java.lang.object 會被加載到java虛擬機中,如果這個加載過程是由java應用自己的類加載器加載所完成的。那么很可能就會在JVM中存在多個版本的java.lang.object類,而且這些類之間還是不兼容的,相互不可見...
JVM類加載機制
類加載的過程 加載 通過一個類的全限定名來獲取此類的二進制字節流 將靜態存儲結構轉換為方法區的運行時數據結構 生成一個java.lang.class 對象,作為這個類的訪問入口 驗證 其實就是檢查加載的 class 的正確性和安全性 準備 為類變量分配存儲空間以及設置類變量初始值(附默認值) 解析 JVM 將常量池內的符號引用轉換為直接引用 初始化 執行類變量的賦值 以及靜態代碼塊 雙親委派模型 ...
猜你喜歡
JVM 之 類加載
1.類加載 2.加載機制 規范中沒有明確說明。Hotspot采用懶加載機制。(用的時候才查詢加載) 3.加載過程 ①加載-> ②連接(驗證,準備,解析)-> ③初始化-> ④使用-> ⑤卸載 3.1加載: 加載有哪些動作: 從哪里加載: 文件中 class文件 jar文件 網絡 計算生成一個二進制流(proxy) 數據庫 3.2連接: 加載開始之后就可以連接了(部分并行...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...