最近,在使用Netbeans 6.8處理JSF Web應用程序時,我經常收到PermGen:內存不足錯誤。我也注意到,這與代碼的熱插拔無關,正如一些人在論壇上提出的那樣;無論何時重新部署代碼,我通常都會重新啓動本地Web服務器Tomcat 6.0。這曾經在一段時間發生在我身上,但到最近,它一直在不斷髮生。在墜毀之前,我通常不能超過兩分鐘。Netbeans Java調試器出現內存不足錯誤
我對這個問題所做的重要觀察是,它似乎只在運行調試器時發生。如果我經常啓動服務器,它將無限期地運行。只要我在調試模式下運行,就會出現此問題。
我已經嘗試了迄今爲止在Tomcat中增加Java的JAVA_OPT內存設置的所有提示;我試着在netbeans.conf中增加Netbeans的可用內存。仍然沒有運氣。如果您想查看我所做的特定配置更改,我也可以發佈。
我也讀過這可能是Java中的內存泄漏的結果。我試過運行Netbean的分析器,但是在我能做任何真正有用的事情之前,它通常會崩潰。另外,當它運行時,所有具有荒謬世代的對象分配都是java庫中的東西,或者是基本元素 - char []是應用程序中最大的內存,例如最大的一代。
我真的很想知道是否有人有類似的問題,如果是的話,他們如何解決它。這開始嚴重阻礙了我的工作能力。
感謝您的任何幫助。
netbeans.conf顯示** - J-XX:PermSize = 32m -J-XX:MaxPermSize = 200m **? – JoseK 2010-08-12 10:14:13
我以前設置了相同的值1024m。我改變了你的建議,分別設置爲256和512。現在,它崩潰了不同。儘管它曾經因PermGen錯誤而立即炸燬,但現在它通常只是掛起,有時我會得到一個實際的錯誤,而其他時候,它會無限期地掛起。 – Lee 2010-08-12 18:34:20
您需要首先使用堆轉儲來識別泄漏的對象以及使它們活着的對象。一旦你知道這一點,你可以立即解決問題(如果它足夠簡單並且你熟悉代碼所在的代碼),或者使用分析器來查明泄漏實例的分配位置。 您可以使用jmap或visualvm(jvisualvm)來獲取堆轉儲。爲了分析,你也可以使用visualvm,但是當然你可以選擇你喜歡的任何工具 - 例如。 MAT如果你想堅持免費的工具。 – 2010-08-19 11:07:53