我一直在帮助一个朋友在 Knime 中开发节点。对于那些不了解 Knime 的人来说,Knime 本质上是一个 Java 框架,它创建的节点可以自动执行您对它们进行编程来执行的某些“事情”。每个节点有 4-5 个类,我们创建的工作流有时有 50-60 个节点。
我一直在研究 PermGen,据我所知,它本质上是每个类/函数的编译形式的副本,供程序在运行时使用。如果你有大量的类(我们这样做),那么 PermGen 将耗尽内存。每次我设置一个流程时,我的 Eclipse 都会崩溃,所以我想通过减少类的数量可以让它再次运行,但现在一周前运行的相同流程仍然出现 PermGen 错误。我已经研究过如何处理这个问题,但我不确定采取哪种途径以及为什么。
所有更改均针对 eclipse.ini
添加 PermGenSpace:
-XX:MaxPermSize=1024m
CMSClassUnloadingEnabled:
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
CMSPermGenSweepingEnabled:
-XX:MaxPermSize=128m
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
我了解设置 MaxPermSize 的更改以及它如何解决问题,我看不到任何负面影响,但我不明白其他两个更改是否会对我的设置产生负面影响。
我应该如何处理这个问题?
资源链接:
http://www.javacodegeeks.com/2013/12/decoding-java-lang-outofmemoryerror-permgen-space.html