首頁 > Java > java教程 > java記憶體溢出的四種情況是什麼

java記憶體溢出的四種情況是什麼

WBOY
發布: 2023-04-30 16:55:13
轉載
1196 人瀏覽過

1、堆溢出,堆是存放實例物件的,但是這樣堆區遲早會滿。設定了堆區內存,創建就會拋出異常。

public class HeapOOM {
    static class User {}
    public static void main(String[] args) {
         List<User> list = new ArrayList<User>();
            while (true) {
                list.add(new User());
         }
    }
}
/*Exception in thread "main" java.lang.OutOfMemoryError:
GC overhead limit exceeded
at com.fdd.test.HeapOOM.main(HeapOOM.java:11)*/
登入後複製

2、虛擬機器堆疊和本機方法堆疊溢位

如果執行緒要求的堆疊深度大於虛擬機器鎖定允許的深度,則拋出StackOverflowEror例外。

如果虛擬機器在擴展堆疊時無法申請足夠的儲存空間,則會出現異常。

public class StackOutOfMemoryError {
    public static void main(String[] args) {     
         test();
    }
    private static void go() {
        System.out.println("StackOverflowError异常");
        test();
    }
}
/*Exception in thread "main" java.lang.StackOverflowError
    at sun.nio.cs.ext.DoubleByte$Encoder.encodeLoop(DoubleByte.java:617)
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
    at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
    at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
    at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
    at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
    at java.io.PrintStream.write(PrintStream.java:526)
    at java.io.PrintStream.print(PrintStream.java:597)
    at java.io.PrintStream.println(PrintStream.java:736)
    at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:11)
at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:13)*/
登入後複製

3、方法區與執行時間常數池溢位

#4、本機直接記憶體溢位

DirectMemory容量可透過-XX:MaxDirectMemorySize指定,如不指定,預設與Java堆的值(-Xmx指定)相同。

以上是java記憶體溢出的四種情況是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板