激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談JVM核心之JVM運行和類加載

淺談JVM核心之JVM運行和類加載

2021-01-27 11:45張豐哲 Java教程

本篇文章主要介紹了JVM核心之JVM運行和類加載,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

本篇博客將寫一點關于jvm的東西,涉及jvm運行時數據區、類加載的過程、類加載器、classloader、雙親委派機制、自定義類加載器等,這些都是博主自己的一點理解,如果有誤,歡迎大家評論拍磚~

關于jvm運行時數據區

淺談JVM核心之JVM運行和類加載

jvm運行時數據區

關于類加載

class文件加載至內存,鏈接(校驗、解析),初始化;最終形成jvm可以直接使用的java類型的過程。

加載:在方法區形成類的運行時數據結構;在堆里面形成該類的class對象,作為訪問方法區的入口。

淺談JVM核心之JVM運行和類加載

加載

鏈接:class文件是否存在問題;一些符號引號替換成直接引用。

初始化:初始化一個類,先初始化它的父類。虛擬機會保證一個類的初始化在多線程環境中被正確加鎖和同步。

要使用類a,必須先加載類a;加載類a,就會把靜態變量、靜態塊合并初始化,然后在調用構造器。注意類的加載和初始化,只有一次。

關于類加載器

上文已經說了,類加載器的作用就是:將class文件的字節碼內容加載到內存中,并將這些靜態數據轉化成方法區中的運行時數據結構,在堆中生成一個代表這個類的class對象,作為方法區類數據的訪問入口。

類加載器的層次結構

引導類加載器bootstrap classloader

加載java核心庫($java_home/jre/lib/rt.jar),原生代碼實現(c++),并不繼承自java.lang.classloader。

擴展類加載器extensions classloader

java可以提供一個擴展目錄($java_home/jre/ext/*.jar)來加載java類。

由sun.misc.launcher.extclassloader實現

應用程序類加載器application classloader(也稱系統類加載器)

一般來說,java應用的類由它加載,即加載路徑是classpath下的路徑。

由sun.misc.launcher.appclassloader實現。

自定義類加載器

開發人員繼承java.lang.classloader實現自己的類加載器

淺談JVM核心之JVM運行和類加載

類加載器的層次結構

關于java.lang.classloader

classloader的基本職責就是:

第一,根據指定的類名稱,找到或者生成對應的字節碼,并根據字節碼生成class對象

第二,加載java應用所需的資源,如配置文件等。

classloader的組合模式

淺談JVM核心之JVM運行和類加載

組合模式為雙親委派機制提供支持

demo:

淺談JVM核心之JVM運行和類加載

類加載器的層次

引導類加載器是原生代碼實現,我們獲取不到,所以是null。

classloader重要api

getparent():該類加載器的父類加載器

loadclass(string name):加載名稱為name的類,并返回class實例。

加載順序是:先交給擴展類加載器加載,如果加載不到,交給引導類加載器加載,加載不到,交給自己去加載,如果自己也加載不到,那么classnotfoundexception。【雙親委派機制】 如果要改變類的加載順序,那么可以override該方法。

findclass(string name),不是加載,僅僅是查找而已

findloadedclass(string name),查找已經被加載過的

defineclass(string name,byte[] b, int off ,int len),可以把字節數組的內容轉換成java類,并會返回class實例。

類加載器的代理模式:雙親委派機制

類加載器的代理模式:就是把加載指定類的過程交給其他加載器。

java默認使用的類加載器代理模式是:雙親委派機制。

雙親委派機制:

就是某個特定的類加載器接到加載類的請求時,首先將加載任務委托給父類加載器,依次追溯,比如說從應用加載器委托給擴展類加載器,從擴展類加載器委托給引導類加載器。這種委托,直至委托到層次最高的類加載器,即引導類加載器,如果委托的父類加載器可以完成加載任務,那么成功返回;只有父類加載器無法完成時,才去自己加載。

可以看出雙親委派機制的意思就是優先父類加載器加載!

試想如果我們定義了一個java.lang.string類,根據雙親委派機制,那么jdk只會加載它自己的string。這顯然保證了java核心庫的類型安全。

雙親委派機制不是唯一的選擇

雖然jdk默認的類加載機制是雙親委派機制,但是并不是所有都采用,比如有些服務器,如tomcat,雖然也采用代理的方式加載,但是加載順序卻恰恰和雙親委派機制相反,它是首先嘗試加載這個類,只有加載不到的情況下,才去讓父類加載器代理加載。

為什么會這樣呢,不是說雙親委派很安全么?

其實就是在安全,和靈活方面進行取舍!

寫一個自定義類加載器

myclassloader:

淺談JVM核心之JVM運行和類加載

自定義類加載器

重寫findclass:

淺談JVM核心之JVM運行和類加載

findclass

test:

淺談JVM核心之JVM運行和類加載

測試

一般情況下,自定義類加載器,需要繼承自classloader。

首先來說,可以檢查請求的類是否已經被自定義的類加載器加載;如果加載了,那么直接返回;否則,那么交給父類加載器,就是進行雙親委派;如果雙親委派也加載不到,那么交給自定義類加載器進行“自定義的方式”來加載類。

另外,被2個不同的類加載加載的同一個類,jvm不會認為是一個類。

好了,關于jvm運行和類加載的過程就寫到這里,^_^

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.jianshu.com/p/d856ee954f9c?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 看91| 日韩字幕在线观看 | 双性精h调教灌尿打屁股的文案 | 91精品国产综合久久婷婷香 | 欧洲黄视频| 久久久成人免费视频 | 美女毛片儿 | 色吧久久 | 黄色欧美精品 | 欧美色视频免费 | 耽美肉文np | 久久国产精 | 九九热九九热 | 欧美日韩在线中文字幕 | 久久久久久久亚洲视频 | 欧美69free性videos | 日韩字幕| 久久久久久久久淑女av国产精品 | 国产精品久久久久久影院8一贰佰 | 国产精品毛片va一区二区三区 | 97porn | 国产精品视频一区二区三区综合 | h视频在线免费观看 | 中文字幕综合在线观看 | 欧美性受xxxxxx黑人xyx性爽 | 免费a级网站 | 久久99国产精品久久99 | 精品一区在线视频 | 久久精品综合视频 | 91精品国产一区二区三区四区在线 | 天天透天天狠天天爱综合97 | 少妇的肉体的满足毛片 | 一级黄色在线观看 | 精品久久久一 | 欧美黄成人免费网站大全 | 国产亚洲欧美一区久久久在 | 中文日产幕无线码6区免费版 | 日产精品久久久一区二区福利 | 国产乱淫a∨片免费观看 | 亚洲第五色综合网 | 黄色日韩网站 |