最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 常見的幾種內存溢出異常的原因及解決

 更新時間:2021年04月25日 11:55:30   作者:唐宋xy  
這篇文章主要介紹了Java 常見的幾種內存溢出異常及解決,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下

內存溢出的異常有很多,并且每種內存溢出都會有不同的異常信息和解決方式,下面會列出常見的幾種內存溢出異常

堆內存溢出

java.lang.OutOfMemoryError: Java heap space

原因:

  • 當堆內存不足,并且已經達到JVM設置的最大值,無法繼續(xù)申請新的內存,存活的對象在堆內存中無法被回收,那么就會拋出該異常,表示堆內存溢出。
  • 當一次從數據庫查詢大量數據,堆內存沒有足夠的內存可以存放大量的數據
  • 大量的強引用對象在堆內存中存活,GC無法回收這些對象,新創(chuàng)建的對象在新生代無法進行分配,F(xiàn)ull GC仍然無法進行回收

解決方案:

  • 查看當前JVM的堆內存配置是否太小,可以考慮增加堆內存大小

JAVA_OPTS="-server -Xms1024m -Xmx1024m"

表示將堆內存的初始值和最大值都設置為1024m

-Xms設置堆內存的初始值

-Xmx設置堆內存的最大值

-Xms和-Xmx最好設置相同的內存大小,可以防止因為JVM頻繁進行內存的調整影響穩(wěn)定性和使用

  • 查看代碼中是否有從數據庫中一次加載大量數據的情況,或者代碼中有大量強引用無法進行回收

通過JVM參數:-XX:+HeapDumpOnOutOfMemoryError可以讓虛擬機在出現(xiàn)內存溢出的時候Dump出當前的堆內存快照,便于保留快照分析

棧內存溢出

java.lang.outOfMemoryError:StackOverFlow Error

原因:

  • 線程請求的棧深度大于虛擬機允許的最大深度,拋出StackOverflowError
  • 虛擬機在擴展棧時無法申請到足夠的內存空間,拋出OutOfMemoryError

解決方案:

  • 檢查代碼是否出現(xiàn)深度遞歸的情況,或者遞歸的終止條件沒有設置
  • 如果是線程的棧內存空間過小,則通過-Xss設置每個線程的棧內存空間

默認的-Xss參數的大小應該是1M

棧內存是線程私有的,如果需要創(chuàng)建更多的線程,那么就需要將每個線程的棧內存空間減小,通過-Xss參數設置每個線程的棧內存空間

配置參數: JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xss128k"

jdk8如果沒有配置-Xss默認大小為512k

-Xss 設置每個線程的堆棧大小,一般默認512~1024kb,和jdk版本有關

方法區(qū)和運行時常量池內存溢出

java.lang.outOfMemoryError: PermGen space

原因:

  • 方法區(qū)存放的是Class的相關信息,如類名、訪問修飾符、常量池、字段描述、方法描述等,內存溢出的原因可能是加載的類過多導致方法區(qū)沒有足夠的內存
  • 如果程序中大量使用cglib或者動態(tài)代理等對目標類進行代理,那么在運行時會生成大量的代理類,如Spring、Hibernate等框架。所以生成的代理類過多導致方法區(qū)沒有足夠的內存

解決方案:

  • 減少沒有必要的Class加載,防止方法區(qū)內存溢出并且減少程序的編譯時間
  • 通過JVM參數設置方法區(qū)的大小,-XX:PermSize和-XX:MaxPermSize設置方法區(qū)的大小

運行時常量池是方法區(qū)的一部分,所以增加方法區(qū)的內存大小,相當于間接的增加了運行時常量池的內存大小

本機直接內存溢出

Direct buffer memory

Java 允許應用程序通過 DirectByteBuffer 直接訪問堆外內存,許多高性能程序通過 DirectByteBuffer 結合內存映射文件(Memory Mapped File)實現(xiàn)高速 IO

原因:

DirectByteBuffer 的默認大小為 64 MB,一旦使用超出限制,就會拋出 Direct buffer memory 錯誤。使用NIO則可能會出現(xiàn)該異常

解決方案:

DirectMemory的內存大小可以通過-XX:MaxDirectMemorySize指定,如果沒有設置,則默認和Java堆最大值(-Xmx)一樣

元空間內存溢出

Metaspace

Jdk8 之后使用元空間(metaspace)代替永久代,元空間和永久代最大的區(qū)別是元空間的內存使用的是本地內存,而永久代使用的是JVM的內存

永久代、元空間都是方法區(qū)的實現(xiàn),方法區(qū)是規(guī)范

原因:

元空間中存儲的是類信息、常量池、方法描述等信息,直接使用本地內存,當本地內存不足的時候,會拋出OutOfMemoryError:Metaspace異常

解決方案:

雖然元空間的內存不是由JVM控制,不過可以通過JVM參數來設置分配的內存空間的大小-XX:MaxMetaspaceSize配置參數

以上就是Java 常見的幾種內存溢出異常及解決的詳細內容,更多關于Java 內存溢出的資料請關注腳本之家其它相關文章!

相關文章

  • Spring源碼解析之BeanPostProcessor知識總結

    Spring源碼解析之BeanPostProcessor知識總結

    今天給大家?guī)淼奈恼率荢pring的相關知識,文章圍繞著BeanPostProcessor的使用展開,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-06-06
  • Java Spring 控制反轉(IOC)容器詳解

    Java Spring 控制反轉(IOC)容器詳解

    這篇文章主要為大家詳細介紹了Spring控制反轉IoC入門使用的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java生成隨機姓名、性別和年齡的實現(xiàn)示例

    Java生成隨機姓名、性別和年齡的實現(xiàn)示例

    這篇文章主要介紹了Java生成隨機姓名、性別和年齡的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Spring Web零xml配置原理以及父子容器關系詳解

    Spring Web零xml配置原理以及父子容器關系詳解

    這篇文章主要介紹了Spring Web零xml配置原理以及父子容器關系詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java JSch遠程執(zhí)行Shell命令的方法

    Java JSch遠程執(zhí)行Shell命令的方法

    本文主要介紹了Java JSch遠程執(zhí)行Shell命令,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java logback日志的簡單使用

    Java logback日志的簡單使用

    這篇文章主要介紹了Java logback日志的使用詳解,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java利用多線程模擬銀行系統(tǒng)存錢問題

    Java利用多線程模擬銀行系統(tǒng)存錢問題

    本文將利用Java多線程模擬銀行系統(tǒng)存錢問題:使用兩個不同的線程向同一個賬戶存錢。文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • OpenTelemetry初識及調用鏈Trace詳解

    OpenTelemetry初識及調用鏈Trace詳解

    這篇文章主要為為大家介紹了OpenTelemetry初識及調用鏈Trace詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 深入了解SpringBoot中@ControllerAdvice的介紹及三種用法

    深入了解SpringBoot中@ControllerAdvice的介紹及三種用法

    這篇文章主要為大家詳細介紹了SpringBoot中@ControllerAdvice的介紹及三種用法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-02-02
  • Java依賴注入容器超詳細全面講解

    Java依賴注入容器超詳細全面講解

    依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個Java實例,調用者)需要另一個角色(另一個Java實例,被調用者)的協(xié)助時,在 傳統(tǒng)的程序設計過程中,通常由調用者來創(chuàng)建被調用者的實例
    2023-01-01

最新評論

临湘市| 元阳县| 平利县| 镇沅| 时尚| 茶陵县| 繁昌县| 农安县| 赤城县| 贞丰县| 阿瓦提县| 铜山县| 林周县| 嵊泗县| 潞西市| 长乐市| 桃园市| 德清县| 瑞昌市| 余姚市| 来凤县| 旬邑县| 塔河县| 崇明县| 花莲县| 天镇县| 屏东市| 大港区| 甘泉县| 大冶市| 新沂市| 开江县| 南召县| 克什克腾旗| 福鼎市| 台湾省| 马山县| 上杭县| 八宿县| 贡山| 来凤县|