线程“异常线程”中的异常java.lang.OutOfMemoryError:Java堆空间。我能做什么?

时间:2013-01-11 05:22:27

标签: java eclipse multithreading out-of-memory

我的日食中有以下错误消息。

Exception in thread "th3" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.ensureCapacity(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
    at Apeiron.FBM.Analysis.Clustering.Key.PatternClusterKey.Load(PatternClusterKey.java:260)
    at Apeiron.FBM.Analysis.UserBin.WaferUserDefineBin.CreatePatternClusterKey(WaferUserDefineBin.java:50)
    at Apeiron.FBM.Analysis.UserBin.UserDefineBin.Load(UserDefineBin.java:244)
    at Apeiron.FBM.Analysis.UserBin.WaferUserDefineBinDictionary.CreateUserDefineBin(WaferUserDefineBinDictionary.java:70)
    at Apeiron.FBM.Analysis.UserBin.UserDefineBinDictionary.Load(UserDefineBinDictionary.java:162)
    at Apeiron.MultiCore.OutputFileCreator.LoadDictionary(OutputFileCreator.java:357)
    at Apeiron.MultiCore.OutputFileCreator.run(OutputFileCreator.java:148)
    at java.lang.Thread.run(Unknown Source)

我的Apeiron程序是由四个线程完成的。调用可以使用“org.w3c.dom.Document”读取的文件。该文件成为WaferUserDefineBin的对象。

所以,我做了一些实验。  我发现的现象如下:
  我认为这与堆大小无关。      我的日食的最大记忆是256M,但我的程序仅使用40M~50M。      我试图从eclipse.ini文件中将堆大小扩展到512M。

  1. 更改WaferUserDefineBin的文件大小问题。  如果我减小文件的大小,则不会发生错误。

  2. 这是多线程的问题。  即使文件的大小很大,它也能在单线程中运行良好。

  3. 另外,我在读取文件的区域使用Lock,但是发生了相同的错误。

    我很抱歉英语能力差。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您需要增加内存(堆大小),但是对于您的程序,而不是Eclipse本身。

您可以在“运行配置”中找到这些设置。有一个带有“VM参数”区域的“Arguments”选项卡。把你的-Xm放在那里。