2017-04-09 85 views
1

這似乎是一個常見問題,但現有的解決方案並不適合我。 我正在嘗試使用木槌包在R中執行主題建模。 該語料庫由論壇評論和應用程序組成。大50 MB。它分爲41.975個文件。Java內存不足:增加堆空間?

這裏是我的腳本:

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") 

之後,我嘗試了木槌。 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中解決此問題並直接切換到槌子。在那裏,我發現了批處理文件的規格爲槌,其中可以看到分配給槌的Java內存限制爲1 GB。由於我的語料庫大約爲1.3 GB,因此根本無法將其加載到Mallet中。在批處理文件中,我可以很容易地改變這一點,並直接使用木槌。

我不知道,如果有可能從R.

+0

不,這是Windows 10. –

+0

UPD:重新安裝了JDK版本,所有東西都開始工作了很多。這似乎是主要問題。我會及時向大家發佈。 –

回答

2

我們必須假設你正在運行的是64位JVM訪問該批處理文件。您可以分配給32位JVM的最大堆爲1.6 GB。

您是否正在運行JDK 1.8?你應該。 Perm gen不見了,取而代之的是託管元空間。

也許你可以使用VisualVM配置文件。

+0

我正在運行Java版本1.8.0_121和64位JVM。 –

+0

這些工具可能在OS平臺上有所不同。 –

3

使用命令行選項-Xmx運行Java,該選項設置堆的最大大小。

Click Here to see Details

我希望它有助於您!