中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中出現堆內存溢出如何解決

發布時間:2021-05-10 15:51:18 來源:億速云 閱讀:475 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關Java中出現堆內存溢出如何解決,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Java可以用來干什么

Java主要應用于:1. web開發;2. Android開發;3. 客戶端開發;4. 網頁開發;5. 企業級應用開發;6. Java大數據開發;7.游戲開發等。

一、實戰-內存溢出

  • 堆內存溢出

  • 棧內存溢出

  • 方法區溢出

  • 直接內存溢出

二、實戰-堆內存溢出

  • 演示堆內存溢出代碼,并且定位問題

  • 總結堆內存溢出的場景與解決方案

  • 分析商城項目中可能存在堆內存溢出的代碼并且解決

三、堆內存溢出演示代碼

public class HeapOOMTest {
    private List<String> oomList = new ArrayList<>();

    public static void main(String[] args) {
        HeapOOMTest oomTest = new HeapOOMTest();
        while (true) {
            oomTest.oomList.add(UUID.randomUUID().toString());
        }
    }
}

VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError

運行該代碼的Main方法

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid18940.hprof ...
Heap dump file created [23854536 bytes in 0.061 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.base/java.lang.Long.fastUUID(Long.java:441)
	at java.base/java.lang.System$2.fastUUID(System.java:2136)
	at java.base/java.util.UUID.toString(UUID.java:395)
	at com.imooc.jvminaction.HeapOOMTest.main(HeapOOMTest.java:16)

在項目的根目錄會自動創建 java_pid18940.hprof 的文件

Mac系統:mat.app

Win系統:Eclipse Memory Analyzer

四、Eclipse Memory Analyzer 分析流程

  • File -> Open Heap Dump,加載剛才產生的hprof文件,選擇Leak Suspects Report

  • 在Overview, 鼠標移動到拼圖,可以看出

  • java.lang.Thread @ 0xff1dbc28 main

  • Shallow Size: 120 B RetainedSize: 10.9 MB (明顯不正常的)

  • 點擊 ++Leak Suspects:++ includes leak suspects and a system overview.

  • Problem Suspect 1 會提示方法占用空間的百分比

  • 點擊 Details &raquo; Accumulated Objects in Dominator Tree

  • 點擊 java.lang.Object[160065] @ 0xffe00000

  • List objects --> with incoming references (別人調用自己)

Leak Suspects &raquo; Leaks &raquo; Problem Suspect 1 &raquo; Description &raquo; See stacktrace 也是可以看出問題的

Java中出現堆內存溢出如何解決

jvisualvm.exe 分析堆內存溢出

Java中出現堆內存溢出如何解決

Java中出現堆內存溢出如何解決

Java中出現堆內存溢出如何解決

五、堆內存溢出的場景

  • 內存泄露

借助工具定位問題

  • 非內存泄露

-Xms -Xmx 分配不合理

六、商城項目可能存在堆內存溢出的方法

1.通過控制pageSize判斷

if (pageSize > 100) {
    pageSize = 100;
}

2.SpringMVC方式

類頭加注解

@Validated

pageSize的入參加注解

@Max(100)

Java中出現堆內存溢出如何解決

看完上述內容,你們對Java中出現堆內存溢出如何解決有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆尧县| 曲阜市| 合江县| 伊金霍洛旗| 谷城县| 绍兴市| 横山县| 武陟县| 孝感市| 通州区| 那坡县| 甘德县| 元阳县| 独山县| 唐山市| 新河县| 玛纳斯县| 岳阳市| 常山县| 察雅县| 花莲市| 宣威市| 龙州县| 盐亭县| 阿拉善盟| 青田县| 临猗县| 阳高县| 维西| 额敏县| 三河市| 兴安县| 荆州市| 内丘县| 瑞昌市| 扬中市| 黄大仙区| 房产| 财经| 正定县| 东城区|