Java的內存泄露:
Java的內存泄漏是指某些對象不再被應用程序使用,而垃圾收集器(Garbage Collector)卻沒能識別它們是“不再使用的”。
如果那些不使用的對象佔用堆(heap)空間足夠大,使得應用程序無法滿足下一次內存分配需求,就會導致OutOfMemoryError錯誤。
java.lang.OutOfMemoryError: PermGen space錯誤的可能原因:
1.永久代(PermGen)的空間不足
2.永久代內存泄漏
解決方法:
1.設置-XX:+CMSClassUnloadingEnabled(必須先設置-XX:+UseConcMarkSweepGC)
這個參數表示在使用CMS垃圾回收機制的時候是否啓用類卸載功能。默認這個是設置爲不啓用的。如果啓用了CMSClassUnloadingEnabled,垃圾回收會清理持久代,移除不再使用的classes。
2.增加-XX:PermSize和-XX:MaxPermSize的大小
永久代初始值,默認是物理內存的1/64,永久代最大值,默認是物理內存的1/4。建議分別設置爲128、512。
3.排查內存泄露
應用程序遇到java.lang.OutOfMemoryError: PermGen space錯誤的原因很多,究其根本原因,大多數是由於object或程序的class loader加載的類的引用已經無用了導致的。