正如标题所示,我在一个帖子中收到了这个错误。
违规的LOC看起来像这样:
for (int i = 0; i < objectListSize; i++) {
logger.INFO("Loop repeat: "+i+" ...", true);
final Double discreteScore = sp.getDouble(superPeerSocket);
final int expectedObjectIDs = sp.getInteger(superPeerSocket);
final String discreteObjects[] = new String[expectedObjectIDs];
for ( int j = 0; j < expectedObjectIDs; j++)
discreteObjects[j] = sp.getString(superPeerSocket);
htPlus.attachInitialDiscreteList2L1(discreteScore, discreteObjects);
}
最后的String discreteObjects []声明是我得到错误的地方。我在一个线程中运行此代码。当我得到这个时,我有两个当前活动的线程。我也尝试过使用eclipse中的MAT工具。这里是一些内部图表文件的链接:
PLC chart files (dropbox URL) for (int i = 0; i < objectListSize; i++) {
logger.INFO("Loop repeat: "+i+" ...", true);
final Double discreteScore = sp.getDouble(superPeerSocket);
final int expectedObjectIDs = sp.getInteger(superPeerSocket);
final String discreteObjects[] = new String[expectedObjectIDs];
for ( int j = 0; j < expectedObjectIDs; j++)
discreteObjects[j] = sp.getString(superPeerSocket);
htPlus.attachInitialDiscreteList2L1(discreteScore, discreteObjects);
}
不相干的东西:
答案 0 :(得分:6)
每个Java程序都在沙箱中运行。虽然您的操作系统可能有10 GB的RAM可用,但您的应用可能只有128 MB。
您需要确保应用程序通过使用-Xms -Xmx参数为JVM分配了足够的ram。 -Xms表示最小值,-Xmx表示最小值
评论中建议您的expectedObjectID似乎有点高。我当然会检查出来。但是,您可以使用以下代码来了解内存使用情况和可用内存。使用该信息,您可以相应地调整-Xms -Xmx。
祝你好运!Runtime runtime = Runtime.getRuntime();
long maxMemory = runtime.maxMemory();
long allocatedMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
System.out.println("free memory: " + freeMemory / 1024);
System.out.println("allocated memory: " + allocatedMemory / 1024);
System.out.println("max memory: " + maxMemory /1024);
System.out.println("total free memory: " +
(freeMemory + (maxMemory - allocatedMemory)) / 1024);