-->

xlConnect r用JVM存储器的(xlConnect R use of JVM memory)

2019-06-26 16:20发布

我运行到河中使用XLConnect(未来解决方案)与JVM内存出现问题

数据载荷为R就好使用loadWorkbookreadWorksheetFromFile ,但更大的数据(约3MB数据帧)卡住而出口与任何导出功能(在此期间被写入到JVM writeNamedRegionwriteWorksheetToFile等),和R停止响应。

我已经重新使用java参数options(java.parameters = "-Xmx1500m")这增加了数据帧我能导出到Excel的大小,但仍旧是震1MB左右放缓,不会变通解决3MB 。

我与32位Office软件和32位Java与8GB内存的机器上64位Windows 7系统上。 3MB似乎并没有非常大的相比,这是理应在有出口的开始(与检查JVM的〜750 MB可用内存xlcMemoryReport )。

想法?

Answer 1:

鉴于3MB的参考值,我总结你想写具有尺寸为数值型变量10列×40K行的data.frame(或类似;这样的data.frame结果object.size在约3.2MB) 。

根据如果你试图写XLS(BIFF8)或XLSX(OOXML)文件,内存的要求可以说是相当不同的。 原因是XLSX文件实际上是压缩XML文件和Apache POI(这是基础的Java API由XLConnect使用)使用的xmlbeans操作这些-这可以说是相当激烈的内存。 BIFF8另一方面是一个二进制数据格式,并且需要更少的存储器。

你应该能提到前尺寸的data.frame写有最大的XLSX文件。 1024米的堆大小,也就是我下面工作得很好:

options(java.parameters = "-Xmx1024m") # required BEFORE any JVM is initialized in R
require(XLConnect)
tmp = as.data.frame(matrix(rnorm(4e5), ncol = 10))
writeWorksheetToFile(tmp, file = "test.xlsx", sheet = "test")

...,使用R 2.15.1 32位与RStudio,XLConnect 0.2-0和JRE 1.6.0_25(4GB内存在32位Windows XP上运行)。

对于那些有兴趣的Apache POI侧内存使用的更深入的讨论,有下面的论述: http://apache-poi.1045710.n5.nabble.com/HSSF-and-XSSF-memory-usage-一些号码,td4312784.html



文章来源: xlConnect R use of JVM memory