1. 程式人生 > >類載入的大概流程和特點

類載入的大概流程和特點

1.類載入的大概過程

如果類未被載入到記憶體,會經過載入,連線,初始化過程。提供java.lang.Class物件

2.類的連線

(1) 驗證: 驗證類是否有正確的內部結構,防止有人估計加入錯誤資訊
(2) 準備: 為類變數分配記憶體,並設定預設值
(3) 解析: 將符號引用轉化為直接引用(final變數直接當作巨集變數)

3.類初始化的時機

1.建立類的例項,用new 或 反射 或 反序列化
2.呼叫類的類方法
3.訪問類的類變數或為類變數賦值
4.反射建立對應java.lang.Class物件
note:訪問final修飾的變數,由於該值在編譯器確定,不會導致初始化

4.JVM的類載入特點

(1)全盤負責:一個類載入器負責載入某個類,該類所依賴和引用的其他class也將由該類載入器載入,除非顯式的使用另一個類載入器。
(2)父類委託:先讓父類載入器嘗試載入該類,當父類無法載入時才從自己的類路徑載入該類
(3)快取機制:已載入的Class都會被快取,當程式需要使用時會先從快取中搜尋該Class,快取不存在時才會讀取對應二進位制資料,並將其轉換成Class物件,存入快取(這也是修改了一個類,必須重啟JVM,修改才生效的原因)

相關推薦

載入大概流程特點

1.類載入的大概過程 如果類未被載入到記憶體,會經過載入,連線,初始化過程。提供java.lang.Class物件 2.類的連線 (1) 驗證: 驗證類是否有正確的內部結構,防止有人估計加入錯

hwui大概流程FrameInfo統計資訊

Android hwui硬體加速從3.0版本開始引入到7.0已經非常複雜,這裡總結下大致的流程和原理 如果input的down事件到來,有些view接收到事件要求系統重繪就會呼叫到ViewRootImpl.scheduleTraversals()方法如下程式碼 void sch

java List三個子的資料結構特點

陣列: 陣列特點:查詢和修改快,增加和刪除慢 ArrayList和Vector的底層是使用陣列的資料結構 在ArrayList中初始化的長度是10,如果長度不夠用了,每次會增加之前長度的50%,然後將舊的集合中的資料拷貝到新的集合中。Vector每次擴容的長度是之前的一倍 陣列的結構

【JVM】載入、連線初始化過程

程式執行時,載入類主要經過3個階段分別是類的載入,連線和初始化。分別介紹一下這三個過程。 一、載入 類的載入指的是將類的.class檔案中二進位制資料讀入到記憶體中,將其放在執行時資料區的方法區內,然後在堆區建立一個 java.lang.Class物件

深入理解JAVA虛擬機器學習筆記14——載入的準備解析

每天進步一點點!今天我們一起看一下類載入的準備階段和解析階段。先看一下準備階段:主要任務是在方法區中為類變數(僅static修飾變數,不包含例項變數)分配記憶體並設定類變數初始化的階段。這裡面的區別,我們通過下面的程式碼來簡單瞭解一下。我們將上面的程式碼編譯好後,通過位元組碼工具看一下其中的資訊。首先,從上

深入Java載入流程,值得你收藏

先測試一番,全對的就走人 //題目一 class Parent1{ public static String parent1 = "hello parent1"; static { System.out.println("Parent1 靜態程式碼塊"); } } class Children

DexClassLoaderPathClassLoader載入機制

分析 sbin 分享 return bject _id ise 否則 nts 0x00 在DexClassLoader和PathClassLoader載入Dex流程一文中,我們分析了dex文件怎樣形成了DexFile結構體。本文中解說類載入機制,實際上就是生

Java的加載對象創建流程的詳細分析

spa java類 parent str pac run 實例 public font 相信我們在面試Java的時候總會有一些公司要做筆試題目的,而Java類的加載和對象創建流程的知識點也是常見的題目之一。接下來通過實例詳細的分析一下: package com.test;p

關於Class物件、載入機制、虛擬機器執行時記憶體佈局的全面解析推測

簡介: 本文是對Java的類載入機制,Class物件,反射原理等相關概念的理解、驗證和Java虛擬機器中記憶體佈局的一些推測。本文重點講述瞭如何理解Class物件以及Class物件的作用。 歡迎探討,如有錯誤敬請指正 如需轉載,請註明出處 http://www.cnblogs.com/nul

JVM總括四-載入過程、雙親委派模型、物件例項化過程 JVM思考-initclinit區別

JVM總括四-類載入過程、雙親委派模型、物件例項化過程 目錄:JVM總括:目錄 一、 類載入過程 類載入過程就是將.class檔案轉化為Class物件,類例項化的過程,(User user = new User(); 這個過程是物件例項化的過程); 一個.class檔案只有一個Class物件(位元

JVM思考-initclinit區別 JVM總括四-載入過程、雙親委派模型、物件例項化過程

JVM思考-init和clinit區別 目錄:JVM總括:目錄 clinit和init的區別其實也就是Class物件初始化物件初始化的區別,詳情看我上一篇部落格:  JVM總括四-類載入過程、雙親委派模型、物件例項化過程 一、init和clinit方法執行時機不同   init是物件構

Java載入器( CLassLoader ) 死磕9: 上下文載入器原理案例

【正文】Java類載入器(  CLassLoader ) 死磕9:  上下文載入器原理和案例 本小節目錄 9.1. 父載入器不能訪問子載入器的類 9.2. 一個寵物工廠介面 9.3. 一個寵物工廠管理類 9.4 APPClassLoader不能訪問子載入器中的類 9.5. 執行緒上下文

Java載入器( CLassLoader ) 死磕8: 使用ASM,載入器實現AOP

【正文】Java類載入器(  CLassLoader ) 死磕8:  使用ASM,和類載入器實現AOP 本小節目錄 8.1. ASM位元組碼操作框架簡介 8.2. ASM和訪問者模式 8.3. 用於增強位元組碼的事務類 8.4 通過ASM訪問註解 8.5. 通過ASM注入AOP事務程式

java載入機制自定義載入

類載入順序 上圖所示的是類載入的順序,按照大的順序可以分為載入、連結、初始化 其中連結又可以分成驗證、準備、解析三個步驟 載入 1.將類的class檔案讀入到記憶體中 載入類檔案的方式有: 1. 本機檔案載入 2.jar包載入 3.網路載入 4.原始檔動態編譯載入

大資料之Spark(八)--- Spark閉包處理,部署模式叢集模式,SparkOnYarn模式,高可用,Spark整合Hive訪問hbase載入等異常解決,使用spark下的thriftserv

一、Spark閉包處理 ------------------------------------------------------------ RDD,resilient distributed dataset,彈性(容錯)分散式資料集。 分割槽列表,function,dep Op

【隨筆】JVM核心:JVM執行載入

前言 本篇部落格將寫一點關於JVM的東西,涉及JVM執行時資料區、類載入的過程、類載入器、ClassLoader、雙親委派機制、自定義類載入器等,這些都是博主自己的一點理解,如果有誤,歡迎大家評論拍磚~   關於JVM執行時資料區

Atitit 定時器timer 總結 目錄 1. 定時器 迴圈定時器 timeout超時定時器 1 2. Spring定時器 1 2.1. 大概流程 1 2.2. 核心原始碼springboot 1

Atitit 定時器timer 總結   目錄 1. 定時器 迴圈定時器 和timeout超時定時器 1 2. Spring定時器 1 2.1. 大概流程 1 2.2. 核心原始碼springboot 1 3. Js定時器 window.setInte

jvm載入tomcat載入機制

應用程式在啟動的時候需要啟動虛擬機器進行載入class檔案到記憶體中。然後等待程式的呼叫。那麼有時候我們的程式回報一個錯誤: ClassNotFoundException異常。什麼情況下會報這個異常呢?也許你會說jvm找不到類。但是jvm它是怎麼進行載入的呢?載入的機制是怎麼樣的? jvm採

Java學習——載入、連線初始化

JVM和類   當呼叫java命令執行某個java程式時,該命令將會啟動一個java虛擬機器程序,同一個JVM裡的所有執行緒、所有變數都處於同一個程序裡,他們都使用該JVM程序的記憶體區。       當系統出現以下幾種情況時,JVM程序將被終止。    ->程式執行到最後正

Java中的載入Class.forName();java反射機制與原理

對於大部分人來說,第一次見到class.forName(String className)這句程式碼應該是在使用jdbc方式連線資料庫的時候。但這句程式碼本質上是什麼含義,做了什麼工作呢?本文將回答此問題。 理解Class.forName方法需要一些知識鋪墊,也就是