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 堆空间错误? [复制]
int 错误:线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
错误:线程“守护程序运行状况统计”中的异常 java.lang.OutOfMemoryError:Java 堆空间
线程“主”java.lang.OutOfMemoryError 中的异常:在 ArrayList 中添加值时发生 Java 堆空间错误 [重复]