This question already has an answer here:
Adjusting GC Overhead Exceeded parameters
(1个答案)
2年前关闭。
我正在寻找用Java编写的程序,该程序将反复尝试计算,请注意它会耗尽内存,更改计算,然后重试直到成功。 (内存耗尽是不可避免的;总的来说,我的想法就像基因编程,在这种情况下,您无法始终提前告知生成的程序是否会耗尽内存。)因此,请看一下主循环来找出问题所在。内存错误。
以下简单的测试程序:
耗尽内存并按预期以未捕获的异常退出,但是这大约需要20分钟,其中大部分时间似乎是由垃圾收集器花费的时间,他们进行了英勇的努力来找到足够的内存以继续运行。
我该如何告诉垃圾收集器内存不足,并且应该更早放弃呢?
(1个答案)
2年前关闭。
我正在寻找用Java编写的程序,该程序将反复尝试计算,请注意它会耗尽内存,更改计算,然后重试直到成功。 (内存耗尽是不可避免的;总的来说,我的想法就像基因编程,在这种情况下,您无法始终提前告知生成的程序是否会耗尽内存。)因此,请看一下主循环来找出问题所在。内存错误。
以下简单的测试程序:
public static void main(String[] args) {
HashMap<String, Integer> hashMap = new HashMap<>();
for (int i = 0; i < 1000000000; i++) {
hashMap.put(Integer.toBinaryString(i), i);
}
System.out.println(hashMap.size());
}
耗尽内存并按预期以未捕获的异常退出,但是这大约需要20分钟,其中大部分时间似乎是由垃圾收集器花费的时间,他们进行了英勇的努力来找到足够的内存以继续运行。
我该如何告诉垃圾收集器内存不足,并且应该更早放弃呢?
最佳答案
我不知道通知垃圾收集器有关内存不足的提前通知的特定方法
但是以下棘手的方法可以立即通知您有关内存不足错误的信息
为HashMap定义一个initialCapacity,您将在运行本身时遇到内存不足错误。
HashMap<String, Integer> hashMap = new HashMap<>(1000000000); // define initialCapacity
for (int i = 0; i < 1000000000; i++) {
hashMap.put(Integer.toBinaryString(i), i);
}
System.out.println(hashMap.size());
10-06 03:15