每隔15-30分钟,Netbeans会显示一个" java.lang.OutOfMemoryError: PermGen space
".从我从谷歌那里学到的东西,这似乎与一般的类加载器泄漏或内存泄漏有关.
不幸的是,我发现的所有建议都与应用程序服务器有关,我不知道它们是否适用于Netbeans.(我甚至不确定它是同一个问题)
这是我申请中的问题吗?我怎样才能找到来源?
这是因为恒定的类加载.
Java将类字节代码和所有常量(例如字符串常量)存储在永久堆中,默认情况下不是垃圾收集(这在大多数情况下都有意义,因为类在应用程序的生命周期中只加载一次).
在通常在整个生命周期内加载类的应用程序中:
热重新部署期间的Web和应用程序服务器;
IDE在运行已开发的应用程序时(每次在Netbeans中运行Run按钮或eclipse时,它会将应用程序的类加载为新的);
等等这种行为是不恰当的,因为最终堆满了.
您需要打开永久堆垃圾收集以防止此错误.
我用的是选项
-XX:MaxPermSize=256M -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
(停止了我的eclipse 3.4投掷" java.lang.OutOfMemoryError: PermGen space
"所以它也应该与netbeans一起工作).
编辑:请注意,对于Netbeans,您可以在以下位置设置这些选项:[Netbeans installation]\etc\netbeans.conf
您应该将这些选项作为
前缀-J
并添加它们netbeans_default_options
(netbeans.conf
有关更多信息,请参阅注释).