JVM複習之OutofMemaryError StackOverflowError

在 Java 虛擬機規範中描述了兩種異常:OutofMemaryError和StackOverflowError。
今天這個部分:

第一:什麼是OutofMemaryError

如果虛擬機在擴展棧時無法申請到足夠的內存空間,則拋出 OutOfMemoryError 異常。

JVM的哪些區域可能會發生OutofMemaryError

我們知道:如果線程正在執行的是一個 Java 方法,這個計數器記錄的是正在執行的虛擬機字節碼指令的地址;如果正在執行的是 Natvie 方法,這個計數器值則爲空(Undefined)。此內存區域是唯一一個在Java 虛擬機規範中沒有規定任何 OutOfMemoryError 情況的區域。
因此在JVM中除了程序計數器之外比如堆內存,方法區,虛擬機棧,本地方法棧等區域都有可能出現OutofMemaryError。

第二:什麼是StackOverflowError

如果線程請求的棧深度大於虛擬機所允許的最大深度,將拋出 StackOverflowError 異常。主要是針對本地方法棧和虛擬機棧內存來說,因爲程序計數器相對來說所佔空間較小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章