堆溢出的情況及解決方案
- 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)
- 直接查詢生產環境服務器內存佔用情況,通過命令定位到具體的那行代碼