您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關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
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 » Accumulated Objects in Dominator Tree
點擊 java.lang.Object[160065] @ 0xffe00000
List objects --> with incoming references (別人調用自己)
Leak Suspects » Leaks » Problem Suspect 1 » Description » See stacktrace 也是可以看出問題的
jvisualvm.exe 分析堆內存溢出
內存泄露
借助工具定位問題
非內存泄露
-Xms -Xmx 分配不合理
1.通過控制pageSize判斷
if (pageSize > 100) { pageSize = 100; }
2.SpringMVC方式
類頭加注解
@Validated
pageSize的入參加注解
@Max(100)
看完上述內容,你們對Java中出現堆內存溢出如何解決有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。