为什么 java.lang.OutOfMemoryError: 在尝试打印代码“stream3.collect(Collectors.toList());”时抛出?

Kla*_*lab 2 java java-8 java-stream

java.lang.OutOfMemoryError: java heap space 执行以下代码时抛出错误。

Stream<String> stream3 = Stream.generate(() -> {return "afdajfkljflks";});

System.out.println(stream3.collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)

为什么具体是java堆空间错误以及这段代码背后的场景System.out.println(stream3.collect(Collectors.toList()));

And*_*ner 10

Stream.generate

返回一个无限连续的无序流,其中每个元素都由提供的供应商生成。

Collectors.toList将尝试创建一个足够大的列表以获取流中的所有元素。有无数个,JVM 无法分配包含这么多元素的列表。

  • @Michael你知道哪些语言可以分配无限大的列表?(我并不是指可以处理无限大流的语言,因为 Java 也可以)。 (3认同)
  • “这些元素有无穷多个,JVM 无法分配包含那么多元素的列表”ergh java 太垃圾了,为什么还有人使用它 (2认同)