Throwable 是 Java 中全部錯誤與異常的超類,Throwable 包含兩個子類,Error 與 Exception 。用於指示發生了異常狀況。java
Java 拋出的 Throwable 能夠分紅三種類型。數組
被檢查異常(checked Exception),運行時異常(RuntimeException),錯誤(Error)。spa
首先說一下:對象
1. 被檢查異常(checked Exception )遞歸
定義:RuntimeException 及其子類,被稱爲運行時異常。特色,Java 編譯器不會檢查他,也就是說,當程序可能出現這類異常,即便沒有「throw 聲明拋出它」,也沒有「try catch 」來捕獲它。仍是會編譯經過。內存
例如,除數爲零的產生的 ArithmeticException 的異常,數組越界產生的 IndexOutOfBoundsException 異常。fail-fail 機制產生的 ConcurrentModificationException 異常,都屬於運行時異常。編譯器
2. 堆內存溢出(out of Memory Error )(OOM)虛擬機
除了程序計數器,虛擬機內存的幾個運行區域都有可能出現 OutOfMemoryError (OOM)it
Java 的堆溢出,通常異常信息是:java.lang.OutOfMemoryError:Java heap spacess。Java 堆用於存儲對象實例,咱們只要不斷建立對象,而且保證 GC Roots 到對象以前有可達路徑來避免垃圾回收機制清除這些對象。就會在對象數量達到最大堆容量限制後產生內存溢出異常。io
3.堆棧溢出 StackOverflow (SOF)
StackOverflowError 給的定義是,當應用程序遞歸太深而發生堆棧溢出,拋出該錯誤。由於棧內存默認是 1 M ~ 2M ,大量遞歸調用或者死循環中,在不斷壓棧中,形成棧容量超過 1 M 而致使的溢出。