亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談JVM內存溢出原因和解決思路

 更新時間:2021年12月27日 15:00:33   作者:JV  
本文主要介紹了淺談JVM內存溢出原因和解決思路,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

棧溢出(虛擬機棧和本地方法棧)

產生原因

  • 在HotSpot中,只能由-Xss參數(shù)來設定。因為在HotSpot中不區(qū)分虛擬機棧和本地方法棧的。
  • 棧溢出時會出現(xiàn)兩種異常:StackOverflowError異常和OutOfMemoryError異常。
    • StackOverflowError異常因為線程請求的棧深度大于虛擬機允許的最大深度。
    • OutOfMemoryError異常發(fā)生在虛擬機棧內存允許動態(tài)擴展的情況下,當擴展棧容量無法申請到足夠的內存時。
  • 因為HotSpot是不支持擴展的,所在除非在線程創(chuàng)建時申請內存無法滿足時,才會出現(xiàn)OutOfMemoryError,其余都是產生StackOverflowError異常。
  • 結論:給每個線程的棧分配內存不是越大越好??梢赃@么理解,比如總的內存是2G,如果一個線程就占了1.5G,那就。。。。

解決思路

出現(xiàn) StackOverflowError異常時,會有明確錯誤堆??晒┓治?,相對而言比較容易定位到問題所在。

如果使用Hotspot虛擬機默認參數(shù),棧深度在大多數(shù)情況下(因為每個方法壓人棧的幀大小并不是一樣的,所以只能說大多數(shù)情況下)到達1000~2000 是完全沒有問題,對于正常的方法調用(包括不能做尾遞歸優(yōu)化的遞歸調用),這個深度應該完全夠用了。但是,如果是建立過多線程導致的內存濫出,在不能減少線程數(shù)量或者更換 64 位虛擬機的情況下,就只能通過減少最大堆和減少棧容量來換取更多的線程。

堆溢出

產生原因

當不斷的創(chuàng)建對象并避免垃圾回收時,總容量觸及最大堆容量時,就會產生溢出。
運行代碼:設置vm參數(shù)-Xms10m -Xmx10m

public class HeapTest {
    static class OOMObj{

    }
    /**
     * vm arg -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError
     */

    public static void main(String[] args) {
        List<OOMObj> oomObjList = new ArrayList<OOMObj>();
        while (true){
            oomObjList.add(new OOMObj());
        }
    }
}

結果:

解決思路

首先通過內存映像分析工具確認是內存泄漏還是內存溢出。

  1. 如果是內存泄漏,說明導致OOM的對象不是必要的。進一步通過工具查看GC Roots引用鏈。一般可以比較精確的定位。
  2. 如果是內存溢出,對象是必須存活的,那就檢查虛擬機的堆參數(shù)-Xms、-Xmx設置,對比機器內存,看是否還有上調的空間。再從代碼上檢查對象生命周期、持有狀態(tài)時間、存儲結構是否有設計不合理等情況。

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

產生原因

一個類要被垃圾收集器回收,條件是比較苛刻的。在經常運行時生成大量動態(tài)類的應用場景里,就應該特別關注了。

解決思路

HotSpot在JDK8中已經完全使用元空間代替永久帶。Hotspot提供了一些參數(shù)作為元空間的防御措施,主要包括:

  1. XX:MaxMetaspacesize:設置元空間最大值,默認是-1,即不限制,或者說只受限于本地內存大小。
  2. -XX:Metaspacesize :指定元空間的初始空間大小,以宇節(jié)為單位,達到該值就會觸發(fā)垃圾收集進行類型卸載,同時收集器會對該值進行調整:如果釋放了大量的空間,就適當降低該值;如果釋放了很少的空間,那么在不超過-XX:MaxMetaspaceSize(如果設置了的話)的情況下,適當提高該值。
  3. -XX:MinMetaspace Free Ratio:作用是在垃圾收集之后控制最小的元空間剩余容量的百分比,可減少因為元空間不足導致的垃圾收集的頻率。類似的還有-xx:Max-MetaspaceFreeRatio,用于控制最大的元空間剩余容量的百分比。

本機直接內存溢出

產生原因

在直接或間接使用了ByteBuffer中的allocateDirect方法的時候,而不做clear的時候就會出現(xiàn)類似的問題。明顯的特征是在Heap Dump文件中不會看到明顯的異常情況。

解決思路

設置參數(shù): -XX:MaxDirectMemorySize

到此這篇關于淺談JVM內存溢出原因和解決思路的文章就介紹到這了,更多相關JVM內存溢出內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mybatis plus 開啟sql日志打印的方法小結

    mybatis plus 開啟sql日志打印的方法小結

    Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生。本文重點給大家介紹mybatis plus 開啟sql日志打印的方法小結,感興趣的朋友一起看看吧
    2021-09-09
  • Java實現(xiàn)文件上傳的兩種方法(uploadify和Spring)

    Java實現(xiàn)文件上傳的兩種方法(uploadify和Spring)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)文件上傳的兩種方法,uploadify和Spring實現(xiàn)文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 動態(tài)配置Spring Boot日志級別的全步驟

    動態(tài)配置Spring Boot日志級別的全步驟

    這篇文章主要給大家介紹了關于動態(tài)配置Spring Boot日志級別的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • java阻塞隊列BlockingQueue詳細解讀

    java阻塞隊列BlockingQueue詳細解讀

    這篇文章主要介紹了java阻塞隊列BlockingQueue詳細解讀,在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數(shù)據(jù)的問題,通過這些高效并且線程安全的隊列類,為我們快速搭建高質量的多線程程序帶來極大的便利,需要的朋友可以參考下
    2023-10-10
  • 詳解Spring與Mybatis整合方法(基于IDEA中的Maven整合)

    詳解Spring與Mybatis整合方法(基于IDEA中的Maven整合)

    這篇文章主要介紹了Spring與Mybatis整合方法(基于IDEA中的Maven整合),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • struts升級到2.5.2遇到的問題及解決方案(推薦)

    struts升級到2.5.2遇到的問題及解決方案(推薦)

    原來的版本是2.3.x,由于安全原因需要升級到2.5.2。但是在升級過程中遇到各種各樣的問題,下面小編給大家?guī)砹藄truts升級到2.5.2遇到的問題及解決方案,需要的朋友參考下吧
    2016-11-11
  • java GUI編程之布局控制器(Layout)實例分析

    java GUI編程之布局控制器(Layout)實例分析

    這篇文章主要介紹了java GUI編程之布局控制器(Layout),結合實例形式分析了java GUI編程中布局控制器(Layout)具體功能、用法及相關操作注意事項,需要的朋友可以參考下
    2020-01-01
  • 關于properties配置文件的加密方式

    關于properties配置文件的加密方式

    這篇文章主要介紹了關于properties配置文件的加密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Eclipse+Java+Swing實現(xiàn)斗地主游戲(代碼)

    Eclipse+Java+Swing實現(xiàn)斗地主游戲(代碼)

    這篇文章主要介紹了Eclipse+Java+Swing實現(xiàn)斗地主游戲并附上詳細的代碼實現(xiàn),正在學習的你可以當小練習練練,希望對你有所幫助
    2022-01-01
  • Java實現(xiàn)二分查找BinarySearch算法

    Java實現(xiàn)二分查找BinarySearch算法

    這篇文章主要介紹了Java實現(xiàn)二分查找BinarySearch算法,二分查找針對的是一個有序的數(shù)據(jù)集合,每次都通過跟區(qū)間的中間元素對比,將待查找的區(qū)間縮小為之前的一半,直到找到要查找的元素,或者區(qū)間被縮小為 0,需要的朋友可以參考下
    2023-12-12

最新評論