Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R错误:java.lang.OutOfMemoryError:java堆空间_Java_R - Fatal编程技术网

R错误:java.lang.OutOfMemoryError:java堆空间

R错误:java.lang.OutOfMemoryError:java堆空间,java,r,Java,R,我正在尝试将R连接到Teradata,以便将数据直接拉入R进行分析。然而,我得到的错误是 Error in .jcall(rp, "I", "fetch", stride, block) : java.lang.OutOfMemoryError: Java heap space 我尝试通过以下操作设置我的R选项以增加JVM的最大堆大小: options(java.parameters = "-Xmx8g") 我还尝试用rJava函数.jinit初始化java参数,作为:.jinit(pa

我正在尝试将R连接到Teradata,以便将数据直接拉入R进行分析。然而,我得到的错误是

Error in .jcall(rp, "I", "fetch", stride, block) :
  java.lang.OutOfMemoryError: Java heap space
我尝试通过以下操作设置我的R选项以增加JVM的最大堆大小:

options(java.parameters = "-Xmx8g")
我还尝试用rJava函数
.jinit
初始化java参数,作为:
.jinit(parameters=“-Xmx8g”)
。 但还是失败了


数据的计算大小应大约为3G(实际上小于3G)。

在加载rJava或任何其他软件包之前,您需要确保分配了额外的内存。首先擦除环境(通过
rm(list=ls())
),如果必须,重新启动R/Rstudio,并修改脚本开头的选项

选项(java.parameters=“-Xmx8000m”)


例如,我不知何故以一种不可复制的方式遇到了这个问题,用
-Xmx8g
部分解决了它,但随机遇到了问题

我现在通过使用找到了一个具有不同垃圾收集器的选项

options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))
library(xlsx)
在脚本开始时和加载任何其他包之前,因为其他包可以自己加载一些java内容,在加载任何java之前必须设置选项

到目前为止,问题没有再次发生


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

我添加了垃圾收集,这为我解决了问题。我正在使用RJDBC连接到Oracle数据库。

只需添加gc()

即可在Mac上运行以下两行代码(在加载任何包之前):

options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))
gc()
这基本上结合了之前在这里发布的两个建议:重要的是,仅运行第一行(如drmariod所建议的)并不能解决我的问题。但是,当我在第一行之后执行
gc()
时(正如用户2961057所建议的),问题就解决了

如果仍然不起作用,请重新启动R会话,然后(在加载任何包之前)改为
options(java.parameters=“-Xmx8g”)
,然后直接执行
gc()
。或者,尝试将RAM从
“-Xmx8g”
进一步增加到例如
“-Xmx16g”
(前提是您至少有同样多的RAM)


编辑:进一步的解决方案:虽然我不得不使用rJava进行R中的模型估计(从大量的X中解释y),但即使我放大到
“-Xmx60000m”
(我使用的机器有64 GB RAM),我仍不断收到上述“OutOfMemory”错误。问题是一些型号规格太大(需要更多的RAM)。在这种情况下,一种可能有帮助的解决方案是缩小问题的规模(例如,通过减少模型中的X数量),或者——如果可能的话——将问题分成独立的部分,分别进行评估,然后再将这些部分放在一起。

您是否可以尝试使用更少的内存来验证它是否有效?仅仅因为原始数据只有3GB,并不排除JVM需要更多内存的可能性。在启动java实例之前,必须确保运行
options(java.parameters=“-Xmx8g”)
。因此,在没有加载包的情况下,在新的R会话中启动。运行该命令,然后加载所有包并重试。您应该很好,但JVM可能因为其他原因需要很多。我猜“计算的数据大小”是存储的有意义信息的大小。然而,数据结构在内存消耗方面并不理想-它们有用于内部使用的字段,它们分配额外的内存以防止重复分配数据添加,因此即使没有任何数据的空数据结构也会消耗一些内存。因此,3Gb的数据很容易需要超过8Gb的操作内存。是的。不知何故,这也使我的代码比以前运行得更快。这确实是正确的答案。非常感谢。