在拋出內存溢出錯誤的時候,一般都會提示內存泄露的種類,一般也都是按照區域進行劃分:
1. 堆(heap)內存泄漏java.lang.OutOfMemoryError: Javaheap space:大家都比較熟悉 ,通過設置-Xms2048m -Xmx4096m可以解決
2. 棧(stack)內存泄漏:當前線程運行期間維護的中間變量等信息過多,例如常見的死循環引起stack over flow
3. 方法區(permanent heap)內存泄漏,即java.lang.OutOfMemoryError: PermGen space:發生的原因和類型裝載、類型卸載有直接的關係,通過設置-XX:MaxNewSize=256m -XX:MaxPermSize=256m可以解決。
一般情況下,當服務器內存過小,而提供了大量的訪問服務時,可能會緩存過多的數據對象造成堆內存溢出,當web應用不斷擴大,加載的lib庫達到一定大小(4M)後,就容易報PermGen OOM,也就是方法區溢出。
Xmx 最大不要超過服務器物理內存的80%