我正在調試我一直在研究的一個相當大的項目(但最初並未創建),並且我注意到它有時會與OutOfMemoryError
崩潰。代碼正在從文件中加載大量數據,所以這通常並不令人驚訝。如果我的堆沒有滿,我如何得到「java.lang.OutOfMemoryError:Java堆空間」?
但是,讓我感到困惑的是,我使用VisualVM 1.3.4來分析程序,它的行爲不一致。大多數時候,我已經運行它,堆逐漸膨脹到2GB左右(計算機有16GB的RAM;這是爲了學術研究),使用的堆越來越高。大約2GB,它會崩潰。隨着時間的推移,該程序不會進行更多信息,所以它不應該在幾分鐘內將堆增加到2GB。
雖然有時候,我會在大約30秒後突然崩潰,堆大小爲250MB,使用中只有大約100MB。如果我的堆沒滿,我如何獲得java.lang.OutOfMemoryError: Java heap space
?
編輯:我使用Eclipse來運行該程序,並且我有VisualVM插件,以便它自動啓動。另外,我正在使用Java 7.
JVM設置爲的最大堆是多少?它不會自動調整內存大小。 – Mikaveli 2012-08-09 13:44:58
您使用的是什麼版本的Java?你使用了什麼命令行參數? (有些參數會阻止你的堆的大小調整使用它的全部) – 2012-08-09 13:46:34
需要更多的信息來評論... – 2012-08-09 13:46:37