当已指定最大堆值时"Java heap space"是否有解决方法来解决内存错误?



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

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

但是,当我运行分类器时(大约 10 分钟后),我收到错误"线程"main"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 的说明增加 RunWeka.ini 文件中的堆大小

最新更新