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

Does While true loop always cause Out of memory error?

我一直认为 while (true) {...Any code..} 总是会导致内存不足错误。

但随着我深入 java,它似乎可能并非如此。

我无法确认,但如果我们有一段时间只进行计算,我们预计不会出现内存不足错误,只会非常不利 cpu 性能,对吗? 另一方面,如果我们总是需要更多内存,则预计会出现内存不足错误。

下面我有3个案例。

  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 会来,看到有未使用的对象,将它们删除。之后又会飙升,以此类推