生產問題之StackOverflowError異常小記

  印象中,這是項目中首次遇到 StackOverflowError,在此作個筆記。java

  (吃飯回來寫)post

  ……線程

  吃飯回來後,嘗試把代碼回退來分析異常產生緣由,然而卻沒法復現這個棧溢出異常……醉了指針

  有緣再見再寫吧blog

 -------------------------------------------------內存

  索性作點棧溢出相關知識點筆記吧:虛擬機

StackOverFlowError 的分析和理解

1. 在java虛擬機規範中,定義了在虛擬機棧和本地方法棧中會產生 StackOverflowError內存管理

2. 虛擬機棧和本地方法棧通常就是咱們說的java內存管理中的棧class

3. 虛擬機棧和本地方法棧是線程之間的獨立內存,每個線程在建立時,java虛擬機都會給該線程分配一塊獨立的內存區域,通常將此內存區域劃分爲虛擬機棧,本地方法棧,程序計數器變量

4. 虛擬機棧中存儲了方法執行時相關信息,每一個方法在調用時都會在虛擬機棧中建立一個方法幀,方法幀中包含了局部變量,操做數,動態連接,方法出口等信息

5. 本地方法棧和虛擬機棧基本相同,不一樣的是本地方法棧是針對線程中的native方法

6. 程序計數器包含了一個程序執行指針,指向了字節碼當前執行的行數

7. 在java虛擬機規範中,虛擬機棧和本地方法棧都會出現StackOverflowError和OutofMemoryError,程序計數器是java虛擬機中惟一一塊不會產生error的內存區域

8. StackOverflowError表明的是,當棧深度超過虛擬機分配給線程的棧大小時就會出現此error

9. OutofMemoryError表明的是,當再申請新的內存時,虛擬機分配給線程的內存大小中沒法再分配新的內存,就會出現此error

10. -Xss1024M虛擬機參數能夠設置虛擬機分配給每一個線程的內存大小,程序計數器佔很小的內存(能夠忽略),通常此內存和線程棧內存相等

11. 在HotSpot虛擬機中,是將虛擬機棧和本地方法棧合二爲一的

相關文章
相關標籤/搜索