国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

什么時(shí)候會(huì)觸發(fā)FullGC?描述一下JVM加載class文件的原理機(jī)制?

這篇具有很好參考價(jià)值的文章主要介紹了什么時(shí)候會(huì)觸發(fā)FullGC?描述一下JVM加載class文件的原理機(jī)制?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

什么時(shí)候會(huì)觸發(fā) FullGC?
除直接調(diào)用 System.gc 外,觸發(fā) Full GC 執(zhí)行的情況有如下四種。 1. 舊生代空間不足 舊生代空間只有
在新生代對(duì)象轉(zhuǎn)入及創(chuàng)建為大對(duì)象、大數(shù)組時(shí)才會(huì)出現(xiàn)不足的現(xiàn)象,當(dāng)執(zhí)行 Full GC 后空間仍然不
足,則拋出如下錯(cuò)誤: java.lang.OutOfMemoryError: Java heap space 為避免以上兩種狀況引起
FullGC ,調(diào)優(yōu)時(shí)應(yīng)盡量做到讓對(duì)象在 Minor GC 階段被回收、讓對(duì)象在新生代多存活一段時(shí)間及不
要?jiǎng)?chuàng)建過大的對(duì)象及數(shù)組。
2. Permanet Generation 空間滿 PermanetGeneration 中存放的為一些 class 的信息等,當(dāng)系統(tǒng)中
要加載的類、反射的類和調(diào)用的方法較多時(shí), Permanet Generation 可能會(huì)被占滿,在未配置為采
CMS GC 的情況下會(huì)執(zhí)行 Full GC 。如果經(jīng)過 Full GC 仍然回收不了,那么 JVM 會(huì)拋出如下錯(cuò)誤信
息: java.lang.OutOfMemoryError: PermGen space 為避免 Perm Gen 占滿造成 Full GC 現(xiàn)象,可
采用的方法為增大 Perm Gen 空間或轉(zhuǎn)為使用 CMS GC 。 3. CMS GC 時(shí)出現(xiàn) promotion failed concurrent mode failure 對(duì)于采用 CMS 進(jìn)行舊生代 GC
程序而言,尤其要注意 GC 日志中是否有 promotion failed concurrent mode failure 兩種狀況,當(dāng)
這兩種狀況出現(xiàn)時(shí)可能會(huì)觸發(fā) Full GC 。 promotionfailed 是在進(jìn)行 Minor GC 時(shí), survivor space
不下、對(duì)象只能放入舊生代,而此時(shí)舊生代也放不下造成的; concurrent mode failure 是在執(zhí)行
CMS GC 的過程中同時(shí)有對(duì)象要放入舊生代,而此時(shí)舊生代空間不足造成的。 應(yīng)對(duì)措施為:增大
survivorspace 、舊生代空間或調(diào)低觸發(fā)并發(fā) GC 的比率,但在 JDK 5.0+ 、 6.0+ 的版本中有可能會(huì)由
JDK bug29 導(dǎo)致 CMS remark 完畢后很久才觸發(fā) sweeping 動(dòng)作。對(duì)于這種狀況,可通過設(shè)置 -
XX:CMSMaxAbortablePrecleanTime=5 (單位為 ms )來避免。
4. 統(tǒng)計(jì)得到的 Minor GC 晉升到舊生代的平均大小大于舊生代的剩余空間 這是一個(gè)較為復(fù)雜的觸發(fā)
情況, Hotspot 為了避免由于新生代對(duì)象晉升到舊生代導(dǎo)致舊生代空間不足的現(xiàn)象,在進(jìn)行 Minor
GC 時(shí),做了一個(gè)判斷,如果之前統(tǒng)計(jì)所得到的 Minor GC 晉升到舊生代的平均大小大于舊生代的剩
余空間,那么就直接觸發(fā) Full GC 。 例如程序第一次觸發(fā) MinorGC 后,有 6MB 的對(duì)象晉升到舊生
代,那么當(dāng)下一次 Minor GC 發(fā)生時(shí),首先檢查舊生代的剩余空間是否大于 6MB ,如果小于 6MB
則執(zhí)行 Full GC 。 當(dāng)新生代采用 PSGC 時(shí),方式稍有不同, PS GC 是在 Minor GC 后也會(huì)檢查,例如上
面的例子中第一次 Minor GC 后, PS GC 會(huì)檢查此時(shí)舊生代的剩余空間是否大于 6MB ,如小于,則觸
發(fā)對(duì)舊生代的回收。 除了以上 4 種狀況外,對(duì)于使用 RMI 來進(jìn)行 RPC 或管理的 Sun JDK 應(yīng)用而言,默
認(rèn)情況下會(huì)一小時(shí)執(zhí)行一次 Full GC 。可通過在啟動(dòng)時(shí)通過 - java
Dsun.rmi.dgc.client.gcInterval=3600000 來設(shè)置 Full GC 執(zhí)行的間隔時(shí)間或通過 -XX:+
DisableExplicitGC 來禁止 RMI 調(diào)用 System.gc 。
描述一下 JVM 加載 class 文件的原理機(jī)制?
JVM 中類的裝載是由類加載器( ClassLoader )和它的子類來實(shí)現(xiàn)的, Java 中的類加載器是一個(gè)重要
Java 運(yùn)行時(shí)系統(tǒng)組件,它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類文件中的類。 由于 Java 的跨平臺(tái)性,經(jīng)過編
譯的 Java 源程序并不是一個(gè)可執(zhí)行程序,而是一個(gè)或多個(gè)類文件。當(dāng) Java 程序需要使用某個(gè)類時(shí),
JVM 會(huì)確保這個(gè)類已經(jīng)被加載、連接(驗(yàn)證、準(zhǔn)備和解析)和初始化。類的加載是指把類的 .class
件中的數(shù)據(jù)讀入到內(nèi)存中,通常是創(chuàng)建一個(gè)字節(jié)數(shù)組讀入 .class 文件,然后產(chǎn)生與所加載類對(duì)應(yīng)的
Class 對(duì)象。加載完成后, Class 對(duì)象還不完整,所以此時(shí)的類還不可用。當(dāng)類被加載后就進(jìn)入連接
階段,這一階段包括驗(yàn)證、準(zhǔn)備(為靜態(tài)變量分配內(nèi)存并設(shè)置默認(rèn)的初始值)和解析(將符號(hào)引用
替換為直接引用)三個(gè)步驟。最后 JVM 對(duì)類進(jìn)行初始化,包括: 1) 如果類存在直接的父類并且這個(gè)
類還沒有被初始化,那么就先初始化父類; 2) 如果類中存在初始化語句,就依次執(zhí)行這些初始化語
句。 類的加載是由類加載器完成的,類加載器包括:根加載器( BootStrap )、擴(kuò)展加載器
Extension )、系統(tǒng)加載器( System )和用戶自定義類加載器( java.lang.ClassLoader 的子
類)。從 Java 2 JDK 1.2 )開始,類加載過程采取了父親委托機(jī)制( PDM )。 PDM 更好的保證了
Java 平臺(tái)的安全性,在該機(jī)制中, JVM 自帶的 Bootstrap 是根加載器,其他的加載器都有且僅有一個(gè)
父類加載器。類的加載首先請(qǐng)求父類加載器加載,父類加載器無能為力時(shí)才由其子類加載器自行加
載。 JVM 不會(huì)向 Java 程序提供對(duì) Bootstrap 的引用。下面是關(guān)于幾個(gè)類加載器的說明:
Bootstrap :一般用本地代碼實(shí)現(xiàn),負(fù)責(zé)加載 JVM 基礎(chǔ)核心類庫( rt.jar );
Extension :從 java.ext.dirs 系統(tǒng)屬性所指定的目錄中加載類庫,它的父加載器是 Bootstrap ; System :又叫應(yīng)用類加載器,其父類是 Extension 。它是應(yīng)用最廣泛的類加載器。它從環(huán)境變
classpath 或者系統(tǒng)屬性 java.class.path 所指定的目錄中記載類,是用戶自定義加載器的默認(rèn)
父加載器。

文章來源地址http://www.zghlxwxcb.cn/news/detail-831257.html

到了這里,關(guān)于什么時(shí)候會(huì)觸發(fā)FullGC?描述一下JVM加載class文件的原理機(jī)制?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Jvm】Java類加載機(jī)制是什么?

    【Jvm】Java類加載機(jī)制是什么?

    什么是類的加載? 類的生命周期? 類加載器是什么? 雙親委派機(jī)制是什么? JVM將class文件字節(jié)碼文件加載到內(nèi)存中, 并將這些靜態(tài)數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu),在堆(并不一定在堆中,HotSpot在方法區(qū)中)中生成一個(gè)代表這個(gè)類的java.lang.Class 對(duì)象,作為方法區(qū)類數(shù)

    2024年02月11日
    瀏覽(17)
  • Java進(jìn)階(4)——結(jié)合類加載JVM的過程理解創(chuàng)建對(duì)象的幾種方式:new,反射Class,克隆clone(拷貝),序列化反序列化

    Java進(jìn)階(4)——結(jié)合類加載JVM的過程理解創(chuàng)建對(duì)象的幾種方式:new,反射Class,克隆clone(拷貝),序列化反序列化

    1.類什么時(shí)候被加載到JVM中,new,Class.forName: Class.forName(“包名.類名”); 2.創(chuàng)建對(duì)象的方式,反射,本質(zhì)是獲得類的類對(duì)象Class; 3.克隆clone,深拷貝,淺拷貝的對(duì)比; 4.序列化和反序列化的方式; Hello h; // 此時(shí)沒有用Hello,jvm并沒有進(jìn)行類加載 看到new : new Book() Class.forName:

    2024年02月12日
    瀏覽(29)
  • 九耶丨閣瑞鈦倫特-請(qǐng)描述一下如何用Axure繪制banner圖效果,并且將這個(gè)功能進(jìn)行詳細(xì)描述。

    第一步:準(zhǔn)備圖片 首先準(zhǔn)備三張大小相同的圖片。 第二步:創(chuàng)建動(dòng)態(tài)面板 右鍵點(diǎn)擊第一張圖片,喚起菜單,選擇“創(chuàng)建動(dòng)態(tài)面板”。 雙擊動(dòng)態(tài)面板,進(jìn)入動(dòng)態(tài)面板編輯界面。點(diǎn)擊“復(fù)制狀態(tài)”圖標(biāo),復(fù)制出三個(gè)狀態(tài),分別放置三張圖片。 接下來需要替換狀態(tài)2與狀態(tài)3的圖片

    2024年02月11日
    瀏覽(15)
  • 復(fù)習(xí)一下JVM內(nèi)存結(jié)構(gòu)

    程序計(jì)數(shù)器內(nèi)存很小,可以看作是 當(dāng)前線程 所執(zhí)行字節(jié)碼的 行號(hào)指示器 。 有了它,程序就能被正確的執(zhí)行。 因?yàn)橛?線程切換 的存在,則每個(gè)線程必須有各自獨(dú)立的程序計(jì)數(shù)器,即 線程私有 的內(nèi)存。 這里再解釋一下什么是 線程切換 ,線程切換指的是: 單處理器在執(zhí)行

    2024年02月20日
    瀏覽(23)
  • 觸發(fā)JVM fatal error并配置相關(guān)JVM參數(shù)

    工作中,Java服務(wù)因?yàn)?fatal error (致命錯(cuò)誤,筆者稱其為 jvm crash ),在服務(wù)運(yùn)行日志中出現(xiàn)了致命錯(cuò)誤的概要信息: 服務(wù)運(yùn)行在k8s中,由于未提前設(shè)置fatal error日志的路徑(掛載到宿主機(jī)目錄),容器重啟后該日志會(huì)丟失,無法深入排查原因 因此,需要查詢jvm的配置,將f

    2024年02月10日
    瀏覽(43)
  • JVM,關(guān)于JVM基礎(chǔ)的知識(shí),你確定不了解一下嗎?

    JVM,關(guān)于JVM基礎(chǔ)的知識(shí),你確定不了解一下嗎?

    目錄 一.JVM的概念 什么是JVM? 二.JVM的運(yùn)行流程 1.class文件如何被JVM加載并運(yùn)行 2.JVM運(yùn)行時(shí)數(shù)據(jù)包括哪些區(qū)域(M) 三.類加載的過程(M) 四.雙親委派模型 1.雙親委派模型分析 2.JAVA中有哪些類加載器(M) 五.垃圾回收機(jī)制 1.死亡對(duì)象的標(biāo)識(shí) ①引用計(jì)數(shù)算法 ②可達(dá)性分析算法

    2024年02月02日
    瀏覽(21)
  • 說一下 JVM 運(yùn)行時(shí)數(shù)據(jù)區(qū) ?

    說一下 JVM 運(yùn)行時(shí)數(shù)據(jù)區(qū) ?

    目錄 一、程序計(jì)數(shù)器(Program Counter Register) 二、Java 虛擬機(jī)棧(Java Virtual Machine Stacks) 三、本地方法棧(Native Method Stack) 四、Java 堆(Java Heap) 五、方法區(qū)(Methed Area) 當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,字節(jié)碼解析器的工作是通過改變這個(gè)計(jì)數(shù)器的值,來選取下一條

    2024年02月21日
    瀏覽(15)
  • 說一下JVM創(chuàng)建對(duì)象的流程?

    說一下JVM創(chuàng)建對(duì)象的流程?

    在實(shí)例化一個(gè)對(duì)象的時(shí)候,JVM 首先會(huì)去檢查目標(biāo)對(duì)象是否已經(jīng)被加載并初始化了。如果沒有,JVM 需要立刻去加載目標(biāo)類,然后調(diào)用目標(biāo)類的構(gòu)造器完成初始化。然后初始化的過程,主要是對(duì)目標(biāo)類里面的靜態(tài)變量、成員變量、靜態(tài)代碼塊進(jìn)行初始化 當(dāng)目標(biāo)類被初始化以后,

    2024年02月22日
    瀏覽(17)
  • 【JVM學(xué)習(xí)】Class文件解析

    最近為了加深對(duì)于JAVA的理解,在復(fù)習(xí)JVM,這里面的內(nèi)容大部分都是比較確定的、文檔性質(zhì)的內(nèi)容,目前并沒有特別的總結(jié)。但是看到類文件結(jié)構(gòu),手癢,想寫了個(gè)解析文件的解析器,那就簡(jiǎn)單記錄下吧。 詳細(xì)內(nèi)容不記了,太多了,有興趣的同學(xué)看虛擬機(jī)相關(guān)書籍了解,這里

    2023年04月13日
    瀏覽(19)
  • 說一下 JVM 有哪些垃圾回收算法?

    說一下 JVM 有哪些垃圾回收算法?

    標(biāo)記無用對(duì)象,然后進(jìn)行清除回收。 標(biāo)記-清除算法(Mark-Sweep)是一種常見的基礎(chǔ)垃圾收集算法,它將垃圾收集分為兩個(gè)階段: 標(biāo)記階段:標(biāo)記出可以回收的對(duì)象。 清除階段:回收被標(biāo)記的對(duì)象所占用的空間。 標(biāo)記-清除算法之所以是基礎(chǔ)的,是因?yàn)楹竺嬷v到的垃圾收集算法

    2024年02月22日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包