Java中的內存溢出

常見的Java內存溢出有以下三種:

1.java.lang.OutOfMemoryError: Java heap space (JVM Heap堆溢出) 

VM在啓動的時候會自動設置JVM Heap的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)不可超過物理內存。
可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。Heap的大小是Young Generation 和Tenured Generaion 之和。
在JVM中如果98%的時間是用於GC,且可用的Heap size 不足2%的時候將拋出此異常信息。

解決方法:手動設置JVM Heap(堆)的大小。

2.java.lang.OutOfMemoryError: PermGen space (PermGen space溢出)

PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域。
爲什麼會內存溢出,這是由於這塊內存主要是被JVM存放Class和Meta信息的,Class在被Load的時候被放入PermGen space區域,它和存放Instance的Heap區域不同,sun的 GC不會在主程序運行期對PermGen space進行清理,所以如果你的APP會載入很多CLASS的話,就很可能出現PermGen space溢出。

解決方法: 手動設置MaxPermSize大小

3.java.lang.StackOverflowError(棧溢出)

棧溢出了,JVM依然是採用棧式的虛擬機,這個和C和Pascal都是一樣的。函數的調用過程都體現在堆棧和退棧上了。
調用構造函數的 “層”太多了,以致於把棧區溢出了。
通常來講,一般棧區遠遠小於堆區的,因爲函數調用過程往往不會多於上千層,而即便每個函數調用需要 1K的空間(這個大約相當於在一個C函數內聲明瞭256個int類型的變量),那麼棧區也不過是需要1MB的空間。通常棧的大小是1-2MB的。
通常遞歸也不要遞歸的層次過多,很容易溢出。

解決方法:修改程序。

4.內存查看工具

JDK本身自帶了非常好用的內存查看工具,在JDK的bin目錄下,叫做jvisualvm.exe


內存溢出解決辦法請查看

http://blog.csdn.net/u013284604/article/details/17758523

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