我的记忆力是否足够?

时间:2017-08-10 04:24:42

标签: java intellij-idea heap-memory

我正在运行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内存,我在Intellij中将Java堆大小设置为:

-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内存,而我的堆设置是&gt; 7G。如果是这种情况,为什么它会发送OutofMemory错误?

3 个答案:

答案 0 :(得分:1)

您正在混合为从IntelliJ IDEA开始的应用程序指定的IntelliJ IDEA JVM选项和VM选项。

你的问题中提到的是IntelliJ IDEA的.vmoptions文件,它应用于运行IntelliJ IDEA的JVM。

您自己的应用程序在单独的JVM中运行,该JVM不继承IntelliJ IDEA JVM的VM选项。

可以在相应的Run/Debug configuration VM选项字段中调整应用的JVM设置。

vm options

答案 1 :(得分:0)

这意味着可能存在内存泄漏,这种情况对我来说主要是因为某些本机库。为了更好地调试,您可以执行以下操作:

  1. 在运行流程之前监控内存,然后看看它是如何随流程执行而增长的。

  2. 查看日志并检查执行路径,是否有大内存映射地址。

  3. 检查线程数是否膨胀。

  4. 考虑监控线程堆栈大小。

答案 2 :(得分:0)

首先想到:为什么你的应用程序需要太多内存?在正常情况下,您是否成功运行了Java应用程序?在那种情况下,java选项的配置是什么? (Heapsize,GC,......)
接下来,使用更大的heapsize重试。 (16G ???)
另外你需要检查的事情是:
- 当前JVM:32位还是64位? - 物理可用内存RAM和交换大小足以扩展?
如果不是env设置的问题,您需要仔细阅读您的图书馆文档。
最后,我希望此链接可以帮助您Stackoverflow