OutOfMemoryError 未完待續

JVM內存java

Heap:
	Eden Space
	Survivor Space
	Old Gen
NonHeap:
	Code Cache
	Metaspace
	Compressed Class Space

PC程序計數器是JVM運行時數據區 Runtime Data Area 惟一沒有OOM的區域;數組

發生OOM時,一般會指明,發生異常的區域,如:源碼分析

Exception in thread thread_name:java.lang.OutOfMemoryError:[1-8]
  • Java heap space 堆空間
    - Xmx  堆內存 最大值
    	- Xms  堆內存 初始值
  • GC Overhead limit exceeded GC過於頻繁
    1.增長參數,-XX:-UseGCOverheadLimit,關閉這個特性,同時增長heap大小,-Xmx1024m。
    	2.排查並優化消耗內存資源代碼.
  • Requested array size exceeds VM limit 嘗試分配過大的數組
  • Metaspace 元空間
  • request size bytes for reason. Out of swap space?
  • Compressed class space
  • reason stack_trace_with_native_method
  • PermGen space
    - XX:PermSize 持久代 初始值
    	- XX:MaxPermSize 持久代 最大值

java.lang.StackOverflowError

棧溢出;
每一個線程都有私有棧內存,當調用一個方法時,都會建立棧楨,放入棧中;
若是調用方法足夠多,超過棧最大深度,就會拋出StackOverflowError;
畢竟有出現異常的就是遞歸深度過深 或 循環調用;
若代碼無異常,可嘗試調整棧內存大小;
棧幀:能夠理解爲方法在運行時的數據集,主要包括局部變量表、操做數棧、動態連接、方法出口、附加信息。

推薦閱讀

相關文章
相關標籤/搜索