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

溫馨提示×

溫馨提示×

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

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

Java中內存異常StackOverflowError與OutOfMemoryError詳解

發布時間:2020-10-06 04:15:34 來源:腳本之家 閱讀:175 作者:wangshuang1631 欄目:編程語言

 Java中內存異常StackOverflowError與OutOfMemoryError詳解

使用Java開發,經常回遇到內存異常的情況,而StackOverflowError和OutOfMemoryError便是最常遇見的錯誤。
首先,看看這兩種錯誤的解釋:

如果當前線程請求的棧深度大于虛擬機所允許的最大深度,將拋出StackOverflowError異常。 如果虛擬機在擴展棧時無法申請到足夠的內存空間,則拋出OutOfMemoryError異常。

這里把異常分為兩種情況,但是存在一些相互重疊的地方:當棧空間無法繼續分配時,到底是內存太小,還是已經使用的棧空間太大,本質上是對同一個問題的兩種描述而已。

接下來,兩個小例子分別展示如何產生這兩種異常:

OutOfMemoryError異常:

首先設置一下虛擬機啟動參數,如下:

Java中內存異常StackOverflowError與OutOfMemoryError詳解

代碼如下:

import java.util.ArrayList;
import java.util.List;

public class TEST1 {
  static class OOMObject{
  }
  public static void main(String[] args) {
    List<OOMObject> list = new ArrayList<OOMObject>();
    while(true){
      list.add(new OOMObject());
    }
  }
}

錯誤信息入下:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  at java.util.Arrays.copyOf(Unknown Source)
  at java.util.Arrays.copyOf(Unknown Source)
  at java.util.ArrayList.grow(Unknown Source)
  at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
  at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
  at java.util.ArrayList.add(Unknown Source)
  at com.ws.TEST1.main(TEST1.java:13)

StackOverflowError異常:

public class TEST2 {
  private int stackLength = 1;
  public void stackLeak() {
    stackLength++;
    stackLeak();
  }
  public static void main(String[] args) {
    TEST2 oom = new TEST2();
    try {
      oom.stackLeak();
    } catch (Throwable e) {
      System.out.println("stack length:" + oom.stackLength);
      throw e;
    }
  }
}

錯誤信息如下:

stack length:7585
Exception in thread "main" java.lang.StackOverflowError
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
  at com.ws.TEST2.stackLeak(TEST2.java:8)
......

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

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

AI

桦川县| 台山市| 大竹县| 洛宁县| 衡阳市| 自治县| 宾川县| 炉霍县| 会昌县| 杭锦后旗| 靖远县| 文山县| 遵义市| 仪征市| 神木县| 衡东县| 虞城县| 铜川市| 桦川县| 呼和浩特市| 琼结县| 扶风县| 富川| 任丘市| 白城市| 莒南县| 泰和县| 桐城市| 进贤县| 凤台县| 长乐市| 绍兴市| 沛县| 门头沟区| 卢湾区| 涡阳县| 赞皇县| 牟定县| 宜春市| 平凉市| 宜昌市|