当前位置: 首页 > 面试题库 >

如何防止Netbeans中的PermGen空间错误?

逄烨
2023-03-14
问题内容

Netbeans每15-30分钟显示一次“ java.lang.OutOfMemoryError: PermGen space”。从我从Google那里学到的信息来看,这似乎与类加载器泄漏或内存泄漏有关。

不幸的是,我发现的所有建议都与应用程序服务器有关,并且我不知道将其应用于Netbeans。(我什至不确定这是同一个问题)

我的应用程序有问题吗?我如何找到来源?


问题答案:

这是因为常量类加载。

Java将类字节码和所有常量(例如,字符串常量)存储在默认情况下不会进行垃圾回收的永久堆中(这在大多数情况下是有意义的,因为类在应用程序的生存期内仅加载一次)。

在经常在整个生命周期中加载类的应用程序中:

  • 热部署期间的Web和应用程序服务器;
  • IDE在运行开发的应用程序时(每次您按下Netbeans中的“运行”按钮或使其黯然失色时,都会将您的应用程序类重新加载);
  • 等等,这种行为是不正确的,因为最终堆会填满。

您需要打开永久堆垃圾收集,以防止出现此错误。

我使用选项

-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_optionsnetbeans.conf有关更多信息,请参见中的注释)。



 类似资料:
  • 我查阅了关于单元素元组的文档,对它如何防止空间泄漏有点困惑,这让我怀疑我对Haskell内存模型和/或垃圾收集器的工作原理一无所知。 引用文件,他们说: Solo最重要的特性是可以强制其“外部”(通常通过模式匹配)而不强制其“内部”,因为它被定义为数据类型而不是新类型。在编写函数以从数据结构中提取值时,这可能很有用。假设您编写了数组的一个实现,并且只提供此函数来索引数组: 这实际上会导致空间泄漏。

  • 我试图将每个列表都位于嵌套对象内的webservice模型映射到更简单的对象。 模型1 映射非常简单: 映射工作正常,除了一个问题。当我将带有null子级的父母映射到父母2并返回父母时,儿童对象是用空列表创建的。有什么方法可以防止这种情况吗?

  • 有人曾经能够使用JAXB在对象列表中删除未使用的命名空间吗?这是请求功能的链接:https://github.com/javaee/jaxb-v2/issues/103(见描述) 是否有用于为此配置 JAXB 的属性?这个问题在MOXy中是否已修复? 我目前正在遍历需要封送的对象,并提取所有需要绑定到。然后我创建一个新的 未使用的名称空间现在不包含在XML中。 我知道即使使用未使用的名称空间,xm

  • 我有一个问题,一个名为updated_at的字段,用户可以自由选择要存储的日期,如果用户发送,这个字段将自动四舍五入为,因此该字段如下所示 我了解到将更改为将解决舍入问题,因此我编写了一个类似于此更改集的Liquibase脚本

  • 问题内容: 首先,我想提一下,我有一个3 GB的内存。 我正在研究一种在节点上时间呈指数形式的算法,因此在代码中已经有了 生成列表中所有顶点的组合,然后我可以处理其中一种排列。 但是,当我为40个顶点运行程序时,它给出了内存错误。 有没有一种更简单的实现方式可以通过它生成顶点的所有组合而不会出现此错误。 问题答案: 尝试使用由排列生成的迭代器,而不是用它重新创建一个列表: 通过这样做,python

  • 我正在用一个项目中相互协作的两个独立的Web应用程序来试验一些问题。在进行了X次部署之后,我得到了臭名昭著的“java.lang.OutofMemoryError:PermGen Space”错误。 所以我已经用VisualVM监视PermGen空间一段时间了,不断地重新部署应用程序,看看发生了什么。 这里有奇怪的行为: 首先,我已经重新部署了15倍以上的第一个应用程序。行为与预期的一样:内存图就