当已经指定了最大堆值时,是否有解决“Java堆空间”内存错误的解决方法?

我正在运行一个WEKA分类器(J48,输入.arff文件由3个字段组成,字段1具有~27k个不同属性,字段2~500k值),最新一代Macbook Pro具有8GB RAM。 我使用-Xmx参数将java堆空间增加到最大值:

java -Xmx7G -cp weka-3-6-10 / weka.jar weka.classifiers.trees.J48 -t myfiles / loc_linear.arff -i

但是当我运行分类器(大约10分钟后)后,我得到错误“ 线程中的exception”主“java.lang.OutOfMemoryError:Java堆空间 ”。

显然我的输入文件8GB RAM是不够的。 这是否意味着唯一的解决方案是拥有更强大的硬件(例如16GB RAM或非常强大的服务器/集群)? 这个问题会有解决方法吗? (例如,减少输入文件?如果是这样,您认为哪种标准适用于减少?)。 还有其他想法或建议吗?

如果在Mac OS X计算机上运行Weka GUI,则可以编辑plist配置文件。 我按照Weka邮件列表中的说明进行操作 。

  1. cd到/Applications/weka-XXX.app/Contents,或者安装了weka可执行文件的地方。

  2. 那里会有一个名为Info.plist的文件。 我建议您将该文件的副本保存到其他位置,因为您需要在下一步中更改它。

  3. 在您喜欢的文本编辑器中打开weka-XXX.app/Contents/Info.plist(XML)文件,然后查找显示“VMOptions”的块。 应该有一个值为“-Xmx256M”的值,它指定内存。 将该值更改为更大的值,例如“-Xmx1024M”。

  4. 开始Weka。

从您引用的代码行看来,您似乎是从简单的命令行界面运行Weka。 如果是这种情况,则答案与此[问题]相同( 增加堆以避免WEKA中的内存不足错误 。)

您无法从命令行界面增加堆大小 。 相反,我认为你应该按照Weka的说明RunWeka.ini文件中增加堆大小