【发布时间】:2020-07-15 10:03:51
【问题描述】:
我一直认为 while (true) {...Any code..} 总是会导致内存不足错误。
但随着我对 java 的深入了解,它似乎可能不是那样的。
我无法确认,但如果我们有一段时间只进行计算,我们预计不会出现内存不足错误,只会对 CPU 性能造成非常不利的影响,对吧? 另一方面,如果我们总是需要更多内存,则预计会出现内存不足错误。
我有以下 3 个案例。
- 仅计算(我认为没有在后台分配内存)
- 不断增加的 arraylist 看起来是明显的内存不足错误
- 总是用新的关键字来实例化数组列表。我不知道它是否会因为垃圾收集器而导致内存不足错误。
我没有测试我的电脑,因为我只有一台,希望有人知道。
代码
import java.util.*;
public class HelloLeak{
//calculations only, MemoryLeak?
public static void outofmemo1(){
long i = 0;
while (true)
{
i = i * i;
}
}
//adding infinite number of objects, memory leak confirmed.
public static void outofmemo2(){
int i = 0;
List<Integer> l = new ArrayList<>();
while (true)
{
l.add(i);
}
}
//Creating infinite number of ArrayList objects, will garbage collector clear the unused objects or we will get memory leak?
public static void outofmemo3(){
List<Integer> l = new ArrayList<>();
while (true)
{
l = new ArrayList<>();
}
}
public static void main(String []args){
outofmemo1();
//outofmemo2();
//outofmemo3();
}
}
【问题讨论】:
-
“如果我们总是需要更多内存,那么它预计会发生内存泄漏”,您继续使用这些词,“内存泄漏”。我不认为他们的意思是你认为他们的意思。
-
“我没有测试我的电脑,因为我只有一个” - 你认为内存泄漏会破坏你的电脑吗?
-
@maloomeister 好吧,如果你的内存在你的主板上泄漏,它可能会短路一些东西。 /s
-
@maloomeister 我不怕内存泄漏,但我担心过度消耗 cpu 程序会阻塞我的所有程序并最终烧毁某些东西。所以担心是错误地创建了一个运行无限循环的程序,唯一的解决方案是强行关闭我的电脑以避免最坏的情况。 (发生过一次)
-
嗨@FedericoklezCulloca,你说得对,我误用了这个词。对于那个很抱歉。这不是内存泄漏,而是内存不足错误。因为程序会消耗太多内存。如果我认为我有无法从内存中删除的无法访问的对象,则会导致内存泄漏。让我修正一下标题和文字
标签: java memory-leaks