我的 Eclipse 有以下错误消息。
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 的对象。
所以,我做了一些实验。我发现的现象如下:
1. 我认为这与堆大小无关。我的 Eclipse 的最大内存是 256M,但我的程序只使用了 40M ~ 50M。我试图将 eclipse.ini 文件中的堆大小扩展到 512M。
改变 WaferUserDefineBin 是文件大小的问题。如果我减小文件的大小,则不会发生错误。
这是多线程的问题。即使文件大小很大,它在单线程中也能很好地运行。
另外,我在读取文件的区域使用了锁定,但是发生了相同的错误。
我很抱歉我的英语能力很差。非常感谢您提前提供的帮助。