堆溢出,棧溢出的出現場景以及解決方案

堆溢出的情況及解決方案

  •  OutofMemoryError:Java heap space 堆內存中的空間不足以存放新創建的對象

  • OutOfMemoryError: GC overhead limit exceeded 超過98%的時間用來做GC並且回收了不到2%的堆內存

  • OutOfMemoryError: Direct buffer memory 堆外內存

  • OutofMemoryError:unable to create new native thread

解決方案:

  • OutOfMemoryError: Metaspace 元數據區(Metaspace) 已被用滿

解決方案:-XX:MaxMetaspaceSize=512m

設計一個堆溢出的程序:https://blog.csdn.net/java_wxid/article/details/103021907

棧溢出幾種情況及解決方案

  • 局部數組過大。當函數內部的數組過大時,有可能導致堆棧溢出。
  • 遞歸調用層次太多。遞歸函數在運行時會執行壓棧操作,當壓棧次數太多時,也會導致堆棧溢出。
  • 指針或數組越界。這種情況最常見,例如進行字符串拷貝,或處理用戶輸入等等。

解決這類問題的辦法有兩個

  • 增大棧空間
  • 改用動態分配,使用堆(heap)而不是棧(stack)
  • 直接查詢生產環境服務器內存佔用情況,通過命令定位到具體的那行代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章