免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

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

這篇文章將為大家詳細講解有關什么是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的類加載及內存區域就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網頁標題:什么是JVM的類加載及內存區域
文章網址:http://m.newbst.com/article32/jocopc.html

成都網站建設公司_創新互聯,為您提供外貿網站建設做網站網站排名品牌網站建設域名注冊網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司