2017-08-10 64 views
1

我運行一個Java應用程序,收到此消息:我的記憶力夠了嗎?

Exception in thread "main" java.lang.OutOfMemoryError: Cannot allocate new BytePointer(1200): totalBytes = 3G, physicalBytes = 7G 
    at org.bytedeco.javacpp.BytePointer.<init>(BytePointer.java:103) 
    at org.nd4j.compression.impl.NoOp.compressPointer(NoOp.java:73) 
    at org.nd4j.compression.impl.AbstractCompressor.compress(AbstractCompressor.java:131) 
    at org.nd4j.compression.impl.AbstractCompressor.compress(AbstractCompressor.java:103) 
    at org.nd4j.storage.CompressedRamStorage.store(CompressedRamStorage.java:68) 
    at org.deeplearning4j.models.embeddings.loader.WordVectorSerializer.loadStaticModel(WordVectorSerializer.java:2638) 
    at com.dl.SentimentClassifier.main(SentimentClassifier.java:76) 
Caused by: java.lang.OutOfMemoryError: Physical memory usage is too high: physicalBytes = 7G > maxPhysicalBytes = 7G 
    at org.bytedeco.javacpp.Pointer.deallocator(Pointer.java:572) 
    at org.bytedeco.javacpp.Pointer.init(Pointer.java:121) 
    at org.bytedeco.javacpp.BytePointer.allocateArray(Native Method) 
    at org.bytedeco.javacpp.BytePointer.<init>(BytePointer.java:95) 

我的Windows筆記本電腦有16G內存,我作爲設置Java堆大小的IntelliJ:

-Xms128m 
-Xmx10G 
-XX:ReservedCodeCacheSize=240m 
-XX:+UseConcMarkSweepGC 
-XX:SoftRefLRUPolicyMSPerMB=50 
-ea 
-Dsun.io.useCanonCaches=false 
-Djava.net.preferIPv4Stack=true 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:-OmitStackTraceInFastThrow 

什麼消息指?我想它說Java應用程序需要7G內存,我的堆設置是> 7G。如果是這樣,爲什麼它會發送OutofMemory錯誤?

+0

發佈完整的堆棧跟蹤。 – shmosel

+0

@shmosel,請參閱。 – user697911

+0

https://stackoverflow.com/questions/44598965/physical-memory-usage-is-too-high – shmosel

回答

0

你混合了IntelliJ IDEA的JVM選項,併爲您的IntelliJ IDEA啓動應用程序指定VM選項。

在你的問題中剔除的是IntelliJ IDEA的.vmoptions文件,它應用於運行IntelliJ IDEA本身的JVM。

您自己的應用程序在單獨的JVM中運行,該JVM不會繼承IntelliJ IDEA JVM的VM選項。

該應用程序的JVM設置可以在相應的Run/Debug configuration,VM選項字段中進行調整。

vm options

+0

那麼,我是否應該通過「運行配置」來設置VM,而不是Intellij的虛擬機配置?我通常應該爲Intellij設置一個小的VM值,但是爲運行時配置設置一個更大的VM值(如果需要)?如何協調這兩個值? – user697911

+0

這取決於您的項目大小以及您正在運行的代碼的內存要求。如果IntelliJ IDEA對內存不足或IDE性能不滿意,您可以使用幫助|嘗試增加IDE VM選項編輯自定義VM選項。您的應用程序的虛擬機選項完全取決於您,並在運行/調試配置中進行設置。 IDE VM選項不會以任何方式影響您的應用程序。 – CrazyCoder

+0

IDE如何抱怨內存不足?還拋出OutofMemory異常?如何區分? – user697911

0

這意味着可能的內存泄漏,這種情況對我來說主要是因爲一些本地庫。爲了調試好,你可以這樣做以下:

  1. 監視器內存運行過程前,然後看看它與流程執行一起成長。

  2. 查看日誌並檢查執行路徑,看是否有大的內存映射地址。

  3. 檢查線程數是否膨脹。

  4. 考慮監視線程堆棧大小。

0

首先思考:爲什麼你的應用程序需要太多內存?在正常情況下,你是否運行你的Java應用程序的成功?在那種情況下,java選項的配置是什麼? (Heapsize,GC,...)
接下來,重試heapsize更大的最大值。 (16G ???)
另外你需要檢查的是:
- 當前的JVM:32bit或64bit?
- 物理可用內存RAM和交換大小足以擴展?
如果它不是env設置的問題,則需要仔細閱讀庫的文檔。
最後,我希望這個鏈接可以幫助你Stackoverflow