我一直在試圖解決我的Java代碼中由於我正在執行的遞歸而發生的堆棧溢出異常。我知道在Eclipse IDE中增加堆棧大小可以解決這個問題。我想知道,如果這個異常,就像我們創建一個可執行文件並運行一樣,發生在JVM中。操作系統是否不關心該可執行文件所需的內存?發生在JVM中的堆棧溢出異常發生在可執行文件中
0
A
回答
0
運行應用程序時使用的內存有兩種不同的類型(概念上)。
堆是正在創建和存儲對象實例的位置。這是內存的主要部分,也是由JVM收集的垃圾,操作系統確實負責將這些內存分配給您的應用程序。話雖如此,JVM總是以它可能從OS獲得的最大內存量的某種配置啓動(這是可配置的)。
第二種類型的內存稱爲堆棧,它由JVM在內部用於支持方法調用。當你調用一個方法時,你傳遞給該方法的參數被放置在堆棧上,並且每當你引用一個方法參數時被引用。堆棧的另一個用法是用於方法局部變量(即,您在方法中定義的變量)。
當您用完堆棧時會發生堆棧溢出(多麼令人驚訝)。由於它的使用性質,棧比堆更有限,不應該被濫用。如果你有遍歷整個樹/層次結構的遞歸方法,並且你得到了一個點,在那裏你會得到大輸入的堆棧溢出異常,這肯定是一個標誌,你應該將你的遞歸轉換爲迭代(參見:Design patterns for converting recursive algorithms to iterative ones)
相關問題
- 1. 如果發生DispatcherUnhandledException異常,則在Control.LayoutUpdated中發生異常之後發生堆棧溢出
- 2. 當其中一個執行線程發生堆棧溢出異常時,JVM會退出嗎?
- 3. 如何在堆棧溢出發生之前看到堆棧?
- 4. 在方法調用中引發堆棧溢出異常
- 5. VerifyError:錯誤#1023:addItem發生ArrayCollection時發生堆棧溢出
- 6. 堆棧溢出異常
- 7. 堆棧溢出異常
- 8. 堆棧溢出異常
- 9. IIS中的堆棧溢出異常
- 10. JVM不退出時發生TimeoutException異常
- 11. 避免堆棧溢出(C中的迷宮發生器)
- 12. 使用遞歸函數可能會發生堆棧溢出嗎?
- 13. cuda-gdb:「CUDA_EXCEPTION_9:Warp硬件堆棧溢出」的含義/發生
- 14. 如何獲取__del__中發生異常的堆棧跟蹤?
- 15. 在.NET中除二位小數時發生溢出異常
- 16. 執行二進制搜索樹搜索時發生堆棧溢出錯誤
- 17. 爲什麼在發生異常時不顯示堆棧跟蹤?
- 18. 直到發生堆棧溢出爲止的剩餘堆棧大小
- 19. 之前堆棧溢出異常的main()
- 20. Expecto FsCheck在生成字符串時出現堆棧溢出異常
- 21. 「堆棧溢出在行...」在IE中
- 22. Jenkins的groovy jsonBuilder發生間歇性堆棧溢出錯誤
- 23. 遞歸Quicksort引發堆棧溢出異常
- 24. 如何縮小堆棧溢出異常?
- 25. C#WPF Window.ShowDialog堆棧溢出異常
- 26. 避免堆棧溢出異常
- 27. 調試C# - 堆棧溢出異常?
- 28. AppDomain.FirstChanceException和堆棧溢出異常
- 29. 捕捉堆棧溢出異常C#
- 30. 沒有遞歸函數調用會發生堆棧溢出嗎?
您必須爲操作提供最大允許內存。舉一個簡單的例子,如果你的代碼無限運行,並且JVM正在爲它分配所有可用的內存,所有它。會發生什麼?? –
感謝您的快速回復。 1.我的代碼無法無限運行。它只是根據輸入做更多的遞歸。我已經增加了JVM的堆棧大小,它運行良好。 2.我擔心如果使用相同的代碼創建一個exe並運行,會發生什麼情況。 – Sujju
那麼,我不是在談論你的代碼。我只是給你一個例子。 ;) –