While true循环总是导致内存不足错误吗



我一直认为while(true({…任何代码..}都会导致内存不足错误。

但当我深入研究java时,它似乎不是那样的。

我无法确认,但如果我们有一段时间是真的,只做计算,我们不会出现内存不足的错误,只有非常有害的cpu性能,对吧?另一方面,如果我们总是需要更多的内存,那么预计会出现内存不足错误。

我下面有三个案例。

仅限
  1. 计算(我认为引擎盖下没有分配内存(
  2. 不断增加的arraylist,这看起来是一个明显的内存不足错误
  3. 总是用new关键字实例化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(); 
}
}
  1. 除了以无休止的循环结束之外,什么都不会做
  2. 将以OutOfMemoryError崩溃,因为您总是向列表中添加一个新元素,直到堆被填满为止
  3. 将类似于1。但您可能会有高达2GB的峰值,然后GC会来,查看是否有未使用的对象,并删除它们。之后,它会再次飙升,以此类推

最新更新