每當我們執行java程式時,作業系統都會分配一些記憶體給JVM。 JVM 將這塊記憶體分為兩部分。一種是棧內存,另一種是堆疊內存。棧用於執行方法,堆用於存儲物件。當堆疊滿時,JVM 拋出 java.lang.StackOverflowError;當堆滿時,JVM 拋出 java.lang.OutOfMemoryError。
StackOverflowError
- 堆疊用於方法的執行。對於每個方法調用,都會在堆疊記憶體中建立一個區塊
- 與該方法相關的資料(如參數、局部變數或物件參考)儲存在該區塊中。
- 當方法完成執行後,該區塊會與儲存在其中的資料一起從堆疊中刪除。
- 每當我們呼叫一個方法時,它必須完成執行並離開堆疊記憶體。
- 如果方法停留在堆疊中,那麼堆疊將滿,JVM 將拋出 java.lang.StackOverflowError。
OutOfMemoryError
- 我們在Java中建立的物件都儲存在堆疊記憶體中。當不再需要這些物件時,必須將它們從記憶體中刪除。
- 垃圾收集器會從堆記憶體中刪除不需要的物件。
- 如果我們的物件有即時引用,則垃圾收集器不會刪除它們。它只刪除那些沒有即時引用的物件。
- 每當我們呼叫一個方法時,它必須完成執行並離開堆疊記憶體。
- 如果沒有剩餘空間對於堆記憶體中的新對象,JVM 將拋出 java.lang.OutOfMemoryError。
#
以上是在Java中,StackOverflowError和OutOfMemoryError有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!