java內存溢出分類及配置解決辦法

Java應用內存問題分析方法

1.Java內存劃分 
可粗略劃分三類: 
1.1 堆內存 
存放由 new 創建的對象和數組,在堆中分配的內存,由 Java 虛擬機的自動垃圾回收器來管理 

1.2 棧內存 
在函數中定義的一些基本類型的變量和對象的引用變量都是在函數的棧內存中分配(更準確地說是保存了引用的堆內存空間的地址,java中的“指針”)

1.3 永久保存區、方法區(Permanent Generation) 
用於存儲已被虛擬機加載的類信息、常量、靜態變量等

2.Java常見的內存問題表現形式: 
2.1 OutOfMemory:內存溢出 
2.2 Memory Leak:內存泄露 
二者共同點: 
(1) 通常最終的狀態就會導致OOM錯誤 
(2) 在Java堆或本地內存中都可能發生 
二者不同點: 
(1) ML是已經分配好的內存或對象,當不再需要,沒有得到釋放 而OOM則是沒有足夠的空間來供jvm分配新的內存塊 
(2) ML的內存曲線總體上是一條斜向上的曲線而OOM不是,反之未必

3.內存溢出類型: 
虛擬機棧溢出、本地方法棧溢出、方法區溢出、堆溢出、運行時常量池溢出 
異常類型: 
(1) java.lang.OutOfMemoryError: Java heap space 
堆內存溢出 
優化:通過-Xmn(最小值)–Xms(初始值) -Xmx(最大值)參數手動設置 Heap(堆)的大小。

(2) java.lang.OutOfMemoryError: PermGen space 
PermGen Space溢出(方法區溢出、運行時常量池溢出) 
優化:通過MaxPermSize參數設置PermGen space大小。

(3) java.lang.StackOverflowError 
棧溢出(虛擬機棧溢出、本地方法棧溢出) 
優化:通過Xss參數調整

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章