91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是JVM的類加載及內存區域

發布時間:2021-09-10 14:19:24 來源:億速云 閱讀:144 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關什么是JVM的類加載及內存區域,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、JVM加載類的過程

  • 加載,加載為按需加載,主線程需要用到一個類才開始加載一個類。

  • 驗證,簡而言之就是校驗class內容是否符合指定規范

  • 準備,為類變量分配內存空間,并初始默認值。

  • 初始化,執行類的初始化代碼(靜態代碼塊,靜態賦值代碼),注:初始化會檢驗父類是否初始化,沒有則必須先初始化父類。

  • 使用

  • 卸載

二、類加載器

種類

  • 啟動類加載器-Bootstrap ClassLoader,用于加載Java核心類庫-java安裝目錄下的lib目錄下的class。

  • 擴展類加載器-Extension ClassLoader,用于加載java下的一些擴展類庫-java安裝目錄lib\ext下的class。

  • 應用程序類加載器-Application ClassLoader,加載項目ClassPath下所的class。

  • 自定義類加載器,自己定義的類加載器

雙親委派機制

意思就是即優先讓父ClassLoader去加載。原因是避免重復加載,保證應用的classPath下的Class對象在內存中的唯一性。

層次圖

什么是JVM的類加載及內存區域

tomcat破壞雙親委派

tomcat作為java編碼的web容器,本身也是在jvm中運行,怎么讓基于tomcat容器的各個web應用正常運行,使得各個web應用包含的應用的class不會亂套,必須破壞雙親委派機制,為每一個web應用的class都用不同的類加載器去加載。

  • tomcat的類加載器層次圖 什么是JVM的類加載及內存區域

其中:

common、catalina、shared負責加載tomcat自己的核心類庫,webApp加載web應用的class(隔離web應用引用的三方類庫),jsp加載器加載JSP(每個JSP文件都對應一個Jsp類加載器,jsp加載器支持熱加載,即Jsp只要修改,就重新加載一次覆蓋原來的jsp)。

通過tomcat的類加載機制,可以達成以下目標:

  • tomcat支持各個web引用中不同版本的三方類庫相互隔離。

  • 同一個第三方類庫的相同版本在不同web應用可以共享。

  • tomcat自身依賴的類庫需要與應用依賴的類庫隔離 。

  • jsp需要支持修改后不用重啟tomcat即可生效 為了上面類加載隔離和類更新不用重啟,定制開發各種的類加載器。

自定義類加載器的作用

  • 實際中,可以從Web服務器、數據庫或緩存服務器獲取bytes數組,這就不是系統類加載器能做到的了。

  • 可以從不同的路徑中獲取同一個類的不同class對象,可以實現隔離,一個復雜的程序,內部可能按模塊組織,不同模塊可能使用同一個類,但使用的是不同版本,如果使用同一個類加載器,它們是無法共存的,不同模塊使用不同的類加載器就可以實現隔離,Tomcat使用它隔離不同的Web應用,OSGI使用它隔離不同模塊。

  • 可以實現熱部署。使用同一個ClassLoader,類只會被加載一次,加載后,即使class文件已經變了,再次加載,得到的也還是原來的Class對象,而使用自定義類加載器,則可以先創建一個新的ClassLoader,再用它加載Class,得到的Class對象就是新的,從而實現動態更新。

三、JVM內存區域劃分

方法區(1.8之后叫metaspace-元數據空間)

存放類的元數據信息,可以理解為反射獲取的Class對象的哪些信息。

程序計數器

  • 記錄當前執行的class文件中字節碼指令的位置

  • 與線程是一對一的關系,每個線程都會有自己的一個程序計數器

一個程序計數器對應一個線程、一個線程對應一個棧、一個棧由一個個棧幀組成,一個方法對應一個棧幀,棧幀包含局部變量表、操作數棧、動態鏈接、方法出口(相當于結束方法時需要跳轉的位置)。棧幀在調用方法的時候進棧,方法結束的時候出棧。

  • 存放對象數據(上述棧中只存在對象的引用(即堆內存中對象的地址)或基本數據類型的值)

  • 所有線程共享

  • 當引用變量地址數據出棧時,堆中的內存釋放由JVM控制回收

其他內存區域

  • 執行native方法會有線程對應的本地方法棧。

  • NIO中ByteBuffer類方法:allocateDirect(int capacity)-堆外分配內存空間返回DirectBuffer,通過DirectBuffer的Api可以操作堆外內存。

圖示

什么是JVM的類加載及內存區域

關于什么是JVM的類加載及內存區域就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

廉江市| 定安县| 林甸县| 北安市| 无棣县| 慈溪市| 龙海市| 文化| 盐山县| 屏东县| 福贡县| 内乡县| 晋州市| 沙坪坝区| 滕州市| 图们市| 镇宁| 宜城市| 陕西省| 农安县| 东安县| 亚东县| 新平| 鄄城县| 岳阳市| 崇州市| 申扎县| 南木林县| 攀枝花市| 林甸县| 正定县| 皮山县| 榕江县| 鲁甸县| 贵溪市| 赤峰市| 宣化县| 宜章县| 衡水市| 山丹县| 嘉荫县|