R 32 位中的 Java 堆空间错误

Posted

技术标签:

【中文标题】R 32 位中的 Java 堆空间错误【英文标题】:Java heap space error in R 32 bit 【发布时间】:2015-12-21 09:47:34 【问题描述】:

尝试使用包xlsx 中的read.xlsx 函数时,我在R 中遇到错误。错误提示“

.jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, 中的错误: java.lang.OutOfMemoryError: Java 堆空间

我尝试过使用openxlsx 包,它工作正常,但我只想使用xlsx 包。从 R 会话中卸载所有包后,我还尝试设置 java 参数以增加堆空间,但它不起作用。我在 64 位系统上使用 32 位 R、32 位 Java,并在我的环境变量中声明了所有可能的路径。

非常感谢您的帮助!

【问题讨论】:

就是因为这个问题,我放弃了xlsx这个包,搬到readxl,也就是faster。我花了一年多的时间试图解决这个问题——我能得到的最接近的方法是确保我在每次调用read.xlsx 之后运行gc()。很烦人。 【参考方案1】:

我不知何故以不可重现的方式遇到了这个问题,用-Xmx8g 部分解决了它,但随机遇到了问题。

我用不同的垃圾收集器here 描述了一个选项

options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))
library(xlsx)

在脚本的开头和加载任何其他包之前,因为其他包可以自己加载一些 java 的东西,并且必须在加载任何 Java 之前设置选项。

到目前为止,问题没有再次出现。

只有有时在长时间的会话中它仍然会发生。但在这种情况下,会话重新启动通常可以解决问题。

【讨论】:

以上是关于R 32 位中的 Java 堆空间错误的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 java.lang.OutOfMemoryError:Java 堆空间错误? [复制]

Java 无法为对象堆错误保留足够的空间

Clojure 中的巨大文件和 Java 堆空间错误

int 错误:线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间

错误:线程“守护程序运行状况统计”中的异常 java.lang.OutOfMemoryError:Java 堆空间

线程“主”java.lang.OutOfMemoryError 中的异常:在 ArrayList 中添加值时发生 Java 堆空间错误 [重复]