堆空间内存不足

2022-08-31 20:58:58

我的应用程序当前消耗了相当多的内存,因为它正在运行物理模拟。问题是,在第51次模拟中,Java通常会因为内存不足的堆空间而引发错误(我的程序最终运行了数千次模拟)。

无论如何,我不能只增加堆空间,而是修改我的程序,以便在每次运行后清除堆空间,以便我可以运行任意数量的模拟?

编辑:谢谢你们。事实证明,模拟器软件在每次运行后都没有清除信息,并且我已将这些运行全部存储在.ArrayList


答案 1

无法以编程方式动态增加堆,因为堆是在启动 Java 虚拟机时分配的。

但是,您可以使用此命令

java -Xmx1024M YourClass

将内存设置为 1024

或者,您可以设置最小最大值

java -Xms256m -Xmx1024m YourClassNameHere

答案 2

如果您正在使用大量内存并面临内存泄漏,则可能需要检查是否正在使用大量s或s,每个元素都有很多元素。ArrayListHashMap

作为动态数组实现。来自 Sun/Oracle 的源代码显示,当一个新元素入到一个完整的元素中时,将创建一个大小为原始数组 1.5 倍的新数组,并将这些元素复制过来。这意味着,除非您调用其方法,否则您可能会浪费每个使用空间中高达50%的空间。或者更好的是,如果您知道要在手之前插入的元素数量,则以初始容量作为其参数调用构造函数。ArrayListArrayListArrayListtrimToSize

我没有非常仔细地检查源代码,但乍一看,似乎每个数组中的数组长度必须是2的幂,使其成为动态数组的另一个实现。请注意,这实质上是 围绕 的包装器。HashMapHashMapHashSetHashMap


推荐