3.1.1 JVM性能調(diào)優(yōu) - 類加載機制

首先復習了一下jvm運行時數(shù)據(jù)區(qū)

記憶那幅圖吧

  • 線程共享部分 堆內(nèi)存、方法區(qū)
  • 線程獨占部分 虛擬機棧、本地方法棧、程序計數(shù)器

1.類加載器

  • bootstrap加載器 基礎(chǔ)加載器 負責加載jre_home/jre/lib下的類
  • extendClassLoader 負責加載jre_home/jre/lib/ext下的類
  • appClassLoader 負責加載程序員自己編寫的各個java程序的類,具體就是加載各個java程序的"java.class.path"屬性 指定的路徑下的類,或者運行java命令式附帶的-cp參數(shù)指定的地址

2.查看類加載器

任何一個對象,都可以使用getClassLoader這個方法來查看到它對應(yīng)的類加載器,extendClassLoader或者appClassLoader或者自定義的ClassLoader,如果是bootstrapLoader的話,那么輸出的是null,因為bootstrapLoader是由c/C++實現(xiàn)的,它并不是一個java類

3.JVM如何知道類在何方

  • String這種基礎(chǔ)類的話,就在環(huán)境變量jre_home下的jre/lib
  • jdk的其他類的話,就在環(huán)境變量jre_home下的jre/lib/ext
  • 用戶應(yīng)用程序的話,去讀取"java.class.path"這個屬性,獲取路徑getProperty("java.class.path")
  • ips命令
    ips命令可以看到本機有什么java進程
  • jcmd命令
    jcmd pid VM.system_properties 可以看到某一個java線程的屬性,其中就包括"java.class.path"這個屬性

4.類不會重復加載

加載器實例+package+類名 可以唯一確定一個類,jvm不會對同一個類進行重復加載
驗證方法:寫一個while循環(huán),不停地用類類加載機制加載類,期間對源碼進行修改,發(fā)現(xiàn)修改并不生效

5.卸載類

什么時候類會被卸載

要滿足2個條件

  1. 類的所有實例對象被GC
  2. 類的ClassLoader實例被GC

-verbose:class 參數(shù),可以輸出類加載和卸載日志
課后作業(yè):如何在idea設(shè)置VM_Option 和-verbose

6.雙親委派模型

記住那幅圖:appClassLoader、extClassLoader、bootStrapClassLoader由下至上排列,有一順時針的箭頭鏈接三個類加載器,向上是委派、向下是查詢
核心:父加載器無法執(zhí)行類加載任務(wù)時,才由自己完成

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、classLoader 類加載器,將class文件加載到JVM虛擬機內(nèi)存中,使得程序可以運行。通常情況下,JV...
    helloWorld_1118閱讀 2,354評論 0 2
  • ClassLoader翻譯過來就是類加載器,普通的java開發(fā)者其實用到的不多,但對于某些框架開發(fā)者來說卻非常常見...
    時待吾閱讀 1,166評論 0 1
  • 0、前言 讀完本文,你將了解到: 一、為什么說Jabalpur語言是跨平臺的 二、Java虛擬機啟動、加載類過程分...
    vivi_wong閱讀 1,381評論 0 10
  • 轉(zhuǎn)發(fā):本篇文章已授權(quán)微信公眾號 guolin_blog (郭霖)獨家發(fā)布 ClassLoader翻譯過來就是類加載...
    尼爾君閱讀 615評論 0 1
  • 聲明:原創(chuàng)文章,轉(zhuǎn)載請注明出處。http://www.itdecent.cn/u/e02df63eaa87 1、什...
    唐影若凡閱讀 560評論 0 4

友情鏈接更多精彩內(nèi)容