我正在使用xlsx包创建工作簿,工作表,将数据写入工作表,然后保存工作簿。但是,当我多次重复这一组操作时,我开始显示错误消息:
>Error in .jcheck(silent = FALSE) :
java.lang.OutOfMemoryError: GC overhead limit exceeded.jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, .jcast(if (inherits(o, "jobjRef") || inherits(o, "jarrayRef")) o else cl, "java/lang/Object"), .jnew("java/lang/String", method), j_p, j_pc, use.true.class = TRUE, evalString = simplify, evalArray = FALSE)<S4 object of class "jobjRef"
>Error in .jnew("java/io/FileOutputStream", file) :
Java Exception <no description because toString() failed>.jnew("java/io/FileOutputStream", file)<S4 object of class "jobjRef">
>Error in .jnew("org/apache/poi/xssf/usermodel/XSSFWorkbook") :
Java Exception <no description because toString() failed>.jnew("org/apache/poi/xssf/usermodel/XSSFWorkbook")<S4 object of class "jobjRef">
Error in .jcheck(silent = FALSE) :
Java Exception <no description because toString() failed>.jcall(wb, "Lorg/apache/poi/ss/usermodel/Sheet;", "createSheet", sheetName)<S4 object of class "jobjRef"
我想这是因为重复操作会占用Java内存。
我的问题是,如何清除/重新初始化内存,以便我可以再次重复这些操作而不会出现内存不足错误?
r中有没有简单的代码可以实现这个目的?
非常感谢您的建议!
答案 0 :(得分:7)
我不知道如何在xlsx上执行此操作,事实上由于这些问题我不再使用它
我现在使用XLConnect,它有一个命令
xlcFreeMemory()
做到这一点
请注意,为了获得最佳效果,您需要在加载之前增加Java内存,如下所示
options( java.parameters = "-Xmx4g" )
library(XLConnect)
祝你好运
答案 1 :(得分:0)
Pi带上面的答案以注意,您不需要XLConnect
即可完成xlcFreeMemory
的效果...只需注意,xlcFreeMemory
的实际作用是运行以下:
gc()
J("java.lang.Runtime")$getRuntime()$gc()
也就是说,它首先在您的R环境中运行gc()
,然后在现有Java实例的环境中运行。