Excption與Error包結構,OOM 你遇到過哪些情況,SOF 你遇到過哪些情況
Throwable 是 Java 中所有錯誤與異常的超類,Throwable 包含兩個子類,Error 與 Exception 。用於指示發生了異常情況。
Java 丟擲的 Throwable 可以分成三種類型。
被檢查異常(checked Exception),執行時異常(RuntimeException),錯誤(Error)。
首先說一下:
1. 被檢查異常(checked Exception )
定義:RuntimeException 及其子類,被稱為執行時異常。特點,Java 編譯器不會檢查他,也就是說,當程式可能出現這類異常,即使沒有“throw 宣告丟擲它”,也沒有“try catch ”來捕獲它。還是會編譯通過。
例如,除數為零的產生的 ArithmeticException 的異常,陣列越界產生的 IndexOutOfBoundsException 異常。fail-fail 機制產生的 ConcurrentModificationException 異常,都屬於執行時異常。
2. 堆記憶體溢位(out of Memory Error )(OOM)
除了程式計數器,虛擬機器記憶體的幾個執行區域都有可能出現 OutOfMemoryError (OOM)
Java 的堆溢位,一般異常資訊是:java.lang.OutOfMemoryError:Java heap spacess。Java 堆用於儲存物件例項,我們只要不斷建立物件,並且保證 GC Roots 到物件之前有可達路徑來避免垃圾回收機制清除這些物件。就會在物件數量達到最大堆容量限制後產生記憶體溢位異常。
3.堆疊溢位 StackOverflow (SOF)
StackOverflowError 給的定義是,當應用程式遞迴太深而發生堆疊溢位,丟擲該錯誤。因為棧記憶體預設是 1 M ~ 2M ,大量遞迴呼叫或者死迴圈中,在不斷壓棧中,造成棧容量超過 1 M 而導致的溢位。