欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的類加載與類卸載方式

 更新時間:2023年12月27日 16:13:39   作者:m0_38063172  
這篇文章主要介紹了Java中的類加載與類卸載方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Java中的類加載與類卸載

類加載

Java中的代碼都寫在類里面,源代碼(.java文件)經(jīng)過編譯后會變成字節(jié)碼(.class文件),當(dāng)Java應(yīng)用程序運行時,JVM會加載要用到的類。

負(fù)責(zé)類加載的是java.lang.ClassLoader的對象,ClassLoader的對象會根據(jù)類的binary name(不知道怎么翻譯,二進(jìn)制名?)來讀取類的字節(jié)碼,然后把這些字節(jié)碼加載到JVM的方法區(qū)里,同時會在heap里面創(chuàng)建一個Class對象,這個Class對象是類的元數(shù)據(jù)和它的對象通信的接口。

類在heap中的Class對象和加載它的ClassLoader對象之間有強引用。

類卸載

不像類加載,Java中沒有提供顯式進(jìn)行類卸載的API,但是如果加載類的ClassLoader對象被垃圾回收器回收的話,這個類就會被卸載。

所以我們可以自己實現(xiàn)ClassLoader,自己加載類,然后對ClassLoader對象的引用賦值為null,等ClassLoader對象剩下的引用數(shù)量為0時會被回收,這樣就達(dá)到卸載類的目的了。

什么是類加載?什么時候卸載?

1.先看一下類的生命周期

加載 – 連接 – 初始化 – 使用 – 卸載

2.加載

類加載,指的是將類的.class文件中的二進(jìn)制數(shù)據(jù)讀入到內(nèi)存中,把它放進(jìn)運行時數(shù)據(jù)區(qū)的方法區(qū)內(nèi)(Perm區(qū))。

然后在堆區(qū)創(chuàng)建一個java.lang.Class對象,封裝這個類在自身的方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)。

類的加載的最終產(chǎn)品是位于堆區(qū)中的Class對象,Class對象封裝了類在方法區(qū)(Perm區(qū))內(nèi)的數(shù)據(jù)結(jié)構(gòu),并且向Java程序員提供了訪問方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)的接口。

注意,這是仍舊沒有生成針對該類的對象。后續(xù)對類的實例化,會使用堆內(nèi)存中的Class對象生成具體的實例對象。

3.卸載

如果有下面的情況,類就會被卸載:

1、該類所有的實例都已經(jīng)被回收,也就是java堆中不存在該類的任何實例。

2、加載該類的ClassLoader已經(jīng)被回收。

3、該類對應(yīng)的java.lang.Class對象沒有任何地方被引用,無法在任何地方通過反射訪問該類的方法。

如果以上三個條件全部滿足,jvm就會在方法區(qū)垃圾回收的時候?qū)︻愡M(jìn)行卸載,類的卸載過程其實就是在方法區(qū)中清空類信息,java類的整個生命周期就結(jié)束了。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java EasyExcel面向Excel文檔讀寫邏輯示例詳解

    java EasyExcel面向Excel文檔讀寫邏輯示例詳解

    這篇文章主要為大家介紹了java EasyExcel面向Excel文檔讀寫邏輯示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 教你1秒將本地SpringBoot項目jar包部署到Linux環(huán)境(超詳細(xì)!)

    教你1秒將本地SpringBoot項目jar包部署到Linux環(huán)境(超詳細(xì)!)

    spring Boot簡化了Spring應(yīng)用的開發(fā)過程,遵循約定優(yōu)先配置的原則提供了各類開箱即用(out-of-the-box)的框架配置,下面這篇文章主要給大家介紹了關(guān)于1秒將本地SpringBoot項目jar包部署到Linux環(huán)境的相關(guān)資料,超級詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java中Set集合的使用和底層原理解析

    Java中Set集合的使用和底層原理解析

    這篇文章主要介紹了Java中Set集合的使用和底層原理,Set集合的功能上基本上與Collection的API一致, Set集合沒有擴展額外的API,本文通過示例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-12-12
  • Java中切面的使用方法舉例詳解

    Java中切面的使用方法舉例詳解

    這篇文章主要介紹了Java中切面編程(AOP)的基本概念、原理及實現(xiàn)方式,AOP通過將橫切關(guān)注點模塊化為切面,使代碼更易于維護(hù)和擴展,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案

    springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案

    這篇文章主要介紹了springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案,親測試過可以,需要的朋友可以參考下
    2018-07-07
  • 詳細(xì)總結(jié)Java基礎(chǔ)類和包裝類

    詳細(xì)總結(jié)Java基礎(chǔ)類和包裝類

    近幾天一直在復(fù)習(xí)Java基礎(chǔ)知識,今天就帶大家總結(jié)一下Java基礎(chǔ)類和包裝類,下文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Java基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Google Kaptcha 框架實現(xiàn)登錄驗證碼功能(SSM 和 SpringBoot)

    Google Kaptcha 框架實現(xiàn)登錄驗證碼功能(SSM 和 SpringBoot)

    這篇文章主要介紹了Google Kaptcha 實現(xiàn)登錄驗證碼(SSM 和 SpringBoot)功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • Spring注解@Transactional失效的場景分析

    Spring注解@Transactional失效的場景分析

    在使用Spring中事務(wù)注解@Transactional時會存在幾種場景下該注解失效,即不能按照預(yù)期封裝成一個事務(wù)操作,于是本文文將對該注解進(jìn)行學(xué)習(xí)并對相關(guān)失效場景進(jìn)行分析,需要的朋友可以參考下
    2023-07-07
  • Maven使用方法詳及方式詳細(xì)介紹

    Maven使用方法詳及方式詳細(xì)介紹

    使用maven倉庫的話需要從網(wǎng)上下載maven的包,比如“apache-maven-3.5.4-bin.tar”,下載完成之后解壓,在解壓的文件夾中的conf目錄下的settings.xml文件夾下就可以配置maven遠(yuǎn)程倉庫和本地倉庫的地址
    2022-11-11
  • MyBatis的五種批量查詢實例總結(jié)

    MyBatis的五種批量查詢實例總結(jié)

    為了提高代碼的執(zhí)行效率,我們有時需要采用批量查詢的查詢方法,下面這篇文章主要給大家介紹了關(guān)于MyBatis的五種批量查詢的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論