我一直在帮朋友在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