日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA 类加载 随记

發布時間:2023/12/2 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA 类加载 随记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

視頻:?https://www.bilibili.com/video/av29502877

1 JVM把Class加載到內存當中,檢驗解析初始化。默認使用的懶加載方式。

以下步驟是并行執行?

可以把加載源看成JAVA配置文件。

解析:

符號引用:?類名,基本類型

直接引用:內存地址

初始化:

1 類初始化是線程安全的,多個線程同時觸發類初始化時,只有一個類可以執行,其他類阻塞

2 類初始化時執行<clinit>方法,<clinit>按照書寫順序加載并執行類的static代碼。

自上而下,由父到子。自加載器將加載任務上拋,直到頂層。父類加載器加載失敗拋出異常,把加載任務轉給子類加載器。

這樣可以防止重復加載。比如:自定義一個java.lang.Object類,加載時先放到頂層父加載器中,發現已經加載過jdk的java.lang.Object類。此時就不會在加載自定義Object。

下面是java中類加載雙親委派的源碼?

java.lang.ClassLoader#loadClass(java.lang.String, boolean)

protected Class<?> loadClass(String name, boolean resolve)throws ClassNotFoundException{synchronized (getClassLoadingLock(name)) {// 檢查全類名是否已經加載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 statssun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}}

?

轉載于:https://www.cnblogs.com/sw008/p/11054281.html

總結

以上是生活随笔為你收集整理的JAVA 类加载 随记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。