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

java虛擬機jvm方法區(qū)實例講解

 更新時間:2021年02月22日 14:58:01   作者:分享牛  
在本篇文章里小編給大家整理的是一篇關(guān)于java虛擬機jvm方法區(qū)實例講解內(nèi)容,有興趣的朋友們可以學習下。

和java堆一樣,方法區(qū)是一塊所有線程共享的內(nèi)存區(qū)域,用于保存系統(tǒng)的類信息,類的信息有哪些呢。字段、方法、常量池。方法區(qū)也有一塊內(nèi)存區(qū)域所以方法區(qū)的內(nèi)存大小,決定了系統(tǒng)可以包含多少個類,如果系統(tǒng)類太多,方法區(qū)內(nèi)存不夠肯定會導致方法區(qū)溢出,虛擬機同樣會拋出內(nèi)存溢出信息。(內(nèi)存溢出后面相關(guān)文章給大家總結(jié))

jdk6和jdk7中,方法區(qū)可以理解為永久區(qū)(Perm).永久區(qū)可以使用參數(shù)-XX:PermSize和-XX:MaxPermSize制定。默認情況下-XX:MaxPermSize為64MB.如果你項目中使用代理模式或者CGLIB的話可能在運行的時候生成大量的類,如果這樣,需要設置一下永久區(qū)的大小,防止永久區(qū)內(nèi)存溢出。

CGLIB會在后面專門的章節(jié)和代理模式一起講解。(這個系列專注的是JVM的講解)

使用下面代碼:

for (int i = 0; i <10000; i++) {
CglibWapper c=new CglibWapper("cn.springok.perm"+i)
}

代碼解釋:會根據(jù)傳入的參數(shù)動態(tài)生成一個類以及類的實例。因為對象實例化,類的字段、方法、常量池保存在方法區(qū),因此操作會占用一定內(nèi)存的。

大量的類可能導致方法區(qū)溢出,使用下面的參數(shù)運行代碼:

-XX:PermSize=10M -XX:MaxPermSize=10M -XX:PrintGCDetails

參數(shù)說明:

  • -XX:PermSize=10M 初始永久區(qū)大小10M
  • -XX:MaxPermSize 方法區(qū)最大內(nèi)存10M。
  • -XX:PrintGCDetails 打印日志詳情。

執(zhí)行程序部分輸出如下:

compacting perm gen total 86272K, used 86136K [0x44600000, 0x49a40000, 0x64600000)

the space 86272K, 99% used [0x44600000, 0x49a1e2f8, 0x49a1e400, 0x49a40000)

系統(tǒng)內(nèi)存溢出了,擴大-XX:MaxPermSize值,可以生成更多的類。

可以使用工具Visual VM觀察方法區(qū)的具體使用情況。

需要注意一點

jdk8中永久區(qū)被移除了,取而代之的是元數(shù)據(jù)區(qū),可能方法區(qū)依賴jvm的內(nèi)存吧。元數(shù)據(jù)區(qū)可以使用-XX:MaxMetaspaceSize制定,跟之前版本的-XX:MaxPermSize一樣,分配的值越多,就可以支持更多的類。不同的是元數(shù)據(jù)區(qū)是堆外直接內(nèi)存,與方法永久區(qū)不同,在不指定大小的情況下,虛擬機會耗盡所有可用的系統(tǒng)內(nèi)存。

元數(shù)據(jù)區(qū)發(fā)生溢出,虛擬機一樣拋出異常,如下:

java.lang.OutOfMemoryError Metaspace

到此這篇關(guān)于java虛擬機jvm方法區(qū)實例講解的文章就介紹到這了,更多相關(guān)java虛擬機 jvm 方法區(qū)實戰(zhàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合mybatis-generator插件流程詳細講解

    SpringBoot整合mybatis-generator插件流程詳細講解

    這篇文章主要介紹了SpringBoot整合mybatis-generator插件流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • springboot項目整合注冊功能模塊開發(fā)實戰(zhàn)

    springboot項目整合注冊功能模塊開發(fā)實戰(zhàn)

    這篇文章主要介紹了springboot項目整合注冊功能模塊開發(fā)實戰(zhàn),在用戶的注冊是首先需要查詢當前的用戶名是否存在,如果存在則不能進行注冊,相當于一個查詢語句,本文通過實例代碼詳細講解,需要的朋友可以參考下
    2022-11-11
  • Springboot實現(xiàn)視頻上傳及壓縮功能

    Springboot實現(xiàn)視頻上傳及壓縮功能

    這篇文章主要介紹了Springboot實現(xiàn)視頻上傳及壓縮功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Spring如何自定義XML配置擴展

    Spring如何自定義XML配置擴展

    這篇文章主要介紹了Spring如何自定義XML配置擴展,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • Java的外部類為什么不能使用private和protected進行修飾的講解

    Java的外部類為什么不能使用private和protected進行修飾的講解

    今天小編就為大家分享一篇關(guān)于Java的外部類為什么不能使用private和protected進行修飾的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 深入理解Java 對象和類

    深入理解Java 對象和類

    下面小編就為大家?guī)硪黄钊肜斫釰ava 對象和類。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 一文詳解Java如何創(chuàng)建和銷毀對象

    一文詳解Java如何創(chuàng)建和銷毀對象

    Java由Sun Microsystems發(fā)明并在1995年發(fā)布,是世界上使用最廣泛的編程語言之一。本文主要和大家介紹一下Java是如何創(chuàng)建和銷毀對象的,希望對大家有所幫助
    2022-11-11
  • SpringBoot多線程進行異步請求的處理方式

    SpringBoot多線程進行異步請求的處理方式

    這篇文章主要介紹了SpringBoot多線程進行異步請求的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜
    2021-12-12
  • Java集合快速失敗與安全失敗解析

    Java集合快速失敗與安全失敗解析

    這篇文章主要介紹了Java集合快速失敗與安全失敗解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解SpringBoot 處理異常的幾種常見姿勢

    詳解SpringBoot 處理異常的幾種常見姿勢

    這篇文章主要介紹了詳解SpringBoot 處理異常的幾種常見姿勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08

最新評論