Java 内存不足错误

Java 内存不足错误,java,exception-handling,Java,Exception Handling,我已经写了一个代码,我想传递一些不同大小的列表,但是当我的列表超过1024时,它会抛出下面的异常!我怎么办 size, running time for x 2,184073 3,98308 5,617257 9,481714379 17,55230 33,64505 65,41094 129,65120 257,102555 513,197511 1025,465897 Exception in thread "main" java.lang.OutOfMemoryError: Java h

我已经写了一个代码,我想传递一些不同大小的列表,但是当我的列表超过1024时,它会抛出下面的异常!我怎么办

size, running time for x

2,184073
3,98308
5,617257
9,481714379
17,55230
33,64505
65,41094
129,65120
257,102555
513,197511
1025,465897
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at OBSTclasses.MemoizedVersion.<init>(MemoizedVersion.java:33)
        at OBSTclasses.Coordinator.main(Coordinator.java:102)
Java Result: 1

谢谢

您必须增加Java虚拟机的堆空间,请参见此处:

听起来您需要增加Java进程允许使用的最大内存量。向java调用中添加一个参数,如-Xmx512m,其中512m表示512兆字节。

如前所述,如果遇到OutOfMemoryError,除了找到一种使用更少内存的方法外,通过告诉JVM为堆分配更多内存来增加堆空间也是处理这种情况的一种方法

通常,不应该对错误(例如OutOfMemoryError)执行错误处理。与异常相反,错误是JVM抛出的一种情况,它指出出现了对JVM来说是致命的问题,而这是程序本身无法真正处理的

课堂上:

错误是Throwable的一个子类 这表明严重的问题 合理应用不应尝试 抓住。大多数这样的错误是错误的 异常情况


因此,为了简洁地回答这个问题,您不应该在处理OutOfMemory错误时出错,而应该首先找到避免该错误发生的方法。

OutOfMemory错误的可能原因可能是内存泄漏 解决方案: 使用以下命令增加堆大小

用法::java-Xms-Xmx 默认值为:java-Xms32m-Xmx128m 其他值可能是java-Xms128m-Xmx512m -Xms—初始堆大小。 -Xmx-扩展的最大堆大小。
m兆字节

正如库伯德所说,永远不要在java中处理这个错误。
您可以使用MAT内存分析器来检查是否确实存在内存泄漏,或者只是JVM的堆内存不足。在内存泄漏的情况下,您可以使用MAT的结果优化内存占用。否则,您可以增加堆大小,正如许多朋友前面提到的。

是的,这是您的堆空间。默认情况下,Java在大多数平台上为堆分配128MB。您应该考虑您愿意处理的最大列表大小,从而考虑您需要多少内存。可以这样想:Java中double类型的变量通常有8字节长。如果列表长度为1024个项目,则2D数组仅为数组本身就需要8*1024*1024字节或8MB的堆空间。现在,如果列表长度加倍,则需要的堆空间将是32MB的四倍,如果列表长度加倍,则需要的堆空间将达到4096个,总共需要128MB!当然,这会忽略程序创建的其他对象使用的所有堆


所以,你有一些答案。正如其他人所说,最简单的方法是增加JVM实例将使用的最大堆。您还应该考虑在任何时候减少程序所需的内存量。您是否可以计算中间总和或平均值,而无需存储所有数据?或者您可以消除将数据同时存储为列表和数组的需要吗?你能降低数据的精度吗?对于你的应用程序来说,浮点数或整数会像双倍数一样精确吗?

从这些线索中,我只能告诉你,应该增加更改算法的规模。
     minAverageTimeArray = new double[array.size()][array.size()];