Java内存不足: increase heap space?

标签 java r heap-memory topic-modeling

这似乎是一个常见问题,但是现有的解决方案对我不起作用。 我正在尝试借助 mallet 包在 R 中执行主题建模。 该语料库由论坛评论和应用程序组成。 50 MB 大。它分为 41.975 个文件。

这是我的脚本:

documents_65 <- mallet.read.dir("~/20170315_F65/tm")  

# Loading corpus and stopwords
mallet.instances <- mallet.import(id.array = documents_65$id, 
                                  text.array = documents_65$text,
                              "~/stopwords.txt", 
                              token.regexp = "\\p{L}[\\p{L}\\p{P}]+\\p{L}")
topic.model <- MalletLDA(num.topics = 1000)
topic.model$loadDocuments(mallet.instances)
vocabulary <- topic.model$getVocabulary()
word.freqs <- mallet.word.freqs(topic.model)
topic.model$setAlphaOptimization(10, 30)
topic.model$train(1000)
topic.model$maximize(10)
doc.topics <- mallet.doc.topics(topic.model, smoothed=T,
                            normalized=T)

此后我收到错误:

Error in .jcall(wrapper, "[D", "flat_double") : 
java.lang.OutOfMemoryError: Java heap space

正如许多人所建议的,我尝试过

options(java.parameters = "-Xmx1000m")

之后我再次尝试 mallet.doc.topics 命令并得到相同的错误。我尝试在控制面板中分配堆空间(如下建议: https://www.youtube.com/watch?v=b-D24vnuUMM )。

我也尝试过

gc() 

输出:

           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  2407281 128.6    6619081 353.5  7415161 396.1
Vcells 32395876 247.2   48628929 371.1 48628929 371.1

以及通过命令行分配更多堆空间:

java -Xmx2048m

我什至尝试使用 XLConnect 包和以下命令达到分配内存的峰值:

xlcMemoryReport ()

输出:

Amount of free memory in the Java Virtual Machine (JVM):  308.0197 MB

xlcFreeMemory()


.jcall(.jnew("java/lang/Runtime"), "J", "totalMemory")
.jcall(.jnew("java/lang/Runtime"), "J", "maxMemory")

我希望我没有错过一些非常基本的东西。我可以想象我的语料库很难处理并且需要大量内存(主要是因为文件量很大)。

更新: 我无法在 R 中解决这个问题并直接切换到 mallet。在那里我找到了带有 mallet 规范的批处理文件,其中可以看到分配给 mallet 的 java 内存限制为 1 GB。由于我的语料库大小约为 1.3 GB,因此根本不可能将其加载到 Mallet 中。在批处理文件中,我可以轻松更改此设置并继续直接使用木槌。

我不知道是否可以从 R 访问批处理文件。

最佳答案

我们必须假设您正在运行 64 位 JVM。可以分配给 32 位 JVM 的最大堆是 1.6 GB。

您运行的是 JDK 1.8 吗?你应该。 Perm gen 消失了,取而代之的是托管元空间。

也许您可以使用 VisualVM 来分析该应用程序。

关于Java内存不足: increase heap space?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43309714/

相关文章:

java - Solr:使用 block 连接子查询解析器

Java作为dd的前端将iso复制到USB

r - 在 R 中的公式内使用 package::function 会给出不同的结果(特别是 coxph 内的survival::strata)

r - 在 R 中的最小二乘回归图中绘制垂直偏移量

java - 如何估计给定任务是否有足够的内存在 Java 中运行

c++ - 如何对齐堆中的数组?

redis - 就内存使用而言,将其所有数据存储为字符串不是一种开销吗?

java - 测试时为类提供了错误类型的 id

java - 如何选择可以放置元素的方 block ?

r - 包中的年份::huxtable 表脚注默认为科学记数法