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

3
我正在使用WEKA分类器(J48),输入文件是一个包含3个字段的.arff文件,其中第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 heap space"的错误提示。
显然,我的输入文件需要超过8GB的RAM。这是否意味着唯一的解决方案是拥有更强大的硬件(例如16GB的RAM或非常强大的服务器/集群)? 是否有任何解决此问题的方法?(例如缩小输入文件?如果是,你认为应该采用哪些标准进行缩小?)。还有其他的想法或建议吗?
2个回答

5
如果您在Mac OS X机器上运行Weka GUI,则可以编辑plist配置文件。我按照Weka邮件列表中的说明进行操作。
  1. 进入/Applications/weka-XXX.app/Contents或您安装weka可执行文件的任何位置。

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

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

  4. 启动Weka。


0

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

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


2
谢谢,不过RunWeka.ini是专门为Windows系统设计的。我正在使用MacOSX。我能够通过命令行使用-Xmx来增加堆大小。这对我很有效:如果我实时检查内存使用情况,当应用该参数时,它实际上会使用更多的内存并运行更长时间。我还尝试了WEKA GUI for Mac OS的另一种方法:我在info.plist(http://tinyurl.com/q4ow2u2)文件中编辑了内存堆(在MacOS中是“RunWeka.ini”的对应文件),行为与命令行相同:似乎需要超过8GB RAM才能处理我的输入文件。 - Albz
1
哎呀,需要超过8GB的数据真是太大了。你能用Weka进行一些属性选择吗?这可能是缩小数据集大小的一种方法。在Weka中用于属性选择的一个好的度量标准可能是GainRatioAttributeEval(Gain Ratio是J48用来决定树分支的指标)。 - Walter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接