日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM堆溢出实例

發布時間:2023/12/10 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM堆溢出实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

堆溢出條件

要觀察堆溢出,要同時滿足兩個條件:

  • 堆大小固定,不可擴展
  • 不斷創建對象,并保持對象不被回收
  • 因為對象是在堆里面創建的,堆大小一定,一直創建對象就可以消耗完堆空間,同時,由于由于垃圾回收的存在,創建對象的時候也要保證對象不要被當做垃圾回收了,JVM使用可達性分析來判斷一個對象是否是垃圾。我們可以使用jvm參數來限制堆大小,可以將對象加入到List中,保持對象存活。

    堆溢出代碼

    package test.jvm;import java.util.ArrayList; import java.util.List;/**java堆溢出實例* 原理:java的堆是用來存放對象實例的,所以我們只要做到以下三點就可以使堆溢出:* 1、限制堆的大小,不可擴展* 2、不斷新建對象* 3、保持對象存活不被回收* 對應的,我們需要:* 1、改變JVM的啟動參數,將堆的最小值和最大值設成一樣,這樣就可以避免堆自動擴展(其實不一樣也可以)* 2、不斷產生對象* 3、使用一個List來保存對象,保持對象存活* * JVM配置參數: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError* @author luchu**/ public class JVMLearnning01 {static class OOMObject{}public static void main(String[] args){JVMLearnning01 hello = new JVMLearnning01();List<OOMObject> list = new ArrayList<>();while(true){list.add(new OOMObject());}}}

    上面的代碼要產生堆溢出,要先配置jvm啟動參數,run as –> run configration 里可以配置。

    上面幾個人參數的意思是:

    -Xms20m -Xmx20m : 堆的最大最小值都是20m,避免自動擴展。

    XX:+HeapDumpOnOutOfMemoryError :讓虛擬機在出現堆溢出時dump當前內存堆轉儲快照,以便進行分析。分析可以使用Eclipse Memory analyzer進行。


    學習《深入淺出Java虛擬機》 周志明版 2.4章

    總結

    以上是生活随笔為你收集整理的JVM堆溢出实例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。