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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java的类载入器

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

【0】README

0.1)本文文字轉自: 深入剖析tomcat, 旨在 理解 jvm 的類載入器;

【1】 jvm的類載入器相關

1)jvm 使用了3種類載入器來載入所需要的類:分別是引導類載入器(bootstrap class loader), 擴展類載入器(extension class loader) 和 系統類載入器(system class loader)。而 引導類載入器是 擴展類載入器的父親, 擴展類載入器是 系統類載入器的父親。
2)3種載入器的詳細描述:

  • 2.1)引導類載入器: 用于引導啟動 jvm。當調用 javax.exe 是, 就會啟動引導類載入器。引導類載入器是使用本地代碼來實現的, 因為它用來載入運行 jvm 所需要的類, 以及所有的 java 核心類。如 java.lang 包 和 java.io 包下的類。啟動類載入器會在 rt.jar 和 i18n.jar 等java 包中搜索要載入的類。
  • 2.2) 擴展類載入器: 負責載入標準擴展目錄中的類。sum 公司的 jvm 的標準擴展目錄是 /jdk/jre/lib/ext/;
  • 2.3)系統類載入器:是默認的類載入器, 他會搜索在環境變量 CLASSPATH 中指明的路徑和 JAR 文件;

3)jvm 使用的是哪種類載入器呢?
3.1)答案在于 類載入器的代理模型。
3.2)載入一個類 的steps(每當需要載入一個類 的時候):

  • step1)首先調用 系統類載入器,但并不會立即載入這個類;
  • step2)相反,他會將載入類的任務交給其父類載入器——擴展類載入器;
  • step3) 而擴展類載入器也會將載入任務交給其父類載入器——引導類載入器;

3.3)因此,引導類載入器會首先執行載入某個類的任務。接下來有4中cases:

  • case1)如果引導類載入器找不到需要載入的類,那么擴展類載入器會嘗試 載入該類;
  • case2)如果擴展類載入器也找不到該類,就輪到系統類載入器繼續執行載入任務;
  • case3)如果系統類載入器也找不到這個類,拋出 ClassNotFoundException 異常;

3.4)為什么要這么做? 代理模型的重要用途就是為了 解決 類載入過程中的安全問題;

  • 看個荔枝: 當程序的某個地方調用了 自定義的 java.lang.Object 類時, 系統類載入器會將載入工作 委托給 擴展類載入器,繼而會被交給 引導類載入器。 引導類載入器搜索其 核心庫, 找到標準的 java.lang.Object 類, 并將之實例化。 結果是, 自定義的 java.lang.Object 類并沒有被載入。幸運的是, jvm 我們使用了 代理模型, 這種case 是不會發生 的。

4)關于 java 中類載入機制的一件重要事情是, 可以通過繼承抽象類 java.lang.ClassLoader 類 編寫自己的類載入器。而 tomcat 要使用自定義類載入器的原因有3條(reasons):

  • r1) 為了在載入類中指定某些規則;
  • r2)為了緩存已經載入的類;
  • r3)為了實現類的預載入,方便使用;

總結

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

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