Why java.lang.OutOfMemoryError:在尝试打印代码时抛出;stream3.collect(Collectors.toList())&引用;?

Why java.lang.OutOfMemoryError:在尝试打印代码时抛出;stream3.collect(Collectors.toList())&引用;?,java,java-8,java-stream,Java,Java 8,Java Stream,java.lang.OutOfMemoryError:java堆空间执行下面的代码时抛出错误 Stream<String> stream3 = Stream.generate(() -> {return "afdajfkljflks";}); System.out.println(stream3.collect(Collectors.toList())); streamstream3=Stream.generate(()->{return“afdajfkljflks”;})

java.lang.OutOfMemoryError:java堆空间
执行下面的代码时抛出错误

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

System.out.println(stream3.collect(Collectors.toList()));
streamstream3=Stream.generate(()->{return“afdajfkljflks”;});
System.out.println(stream3.collect(collector.toList());

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

流。生成创建无限流。您正试图将无限项放入列表中

JVM是否有无限的堆空间?没有

如果希望流具有单个元素,请使用

Stream.of("afdajfkljflks")
:

返回无限顺序无序流,其中每个元素由提供的供应商生成


Collectors.toList
将尝试创建一个足够大的列表,以容纳流中的所有元素。有无限多的元素,JVM不能分配一个包含那么多元素的列表。

“有无限多的元素,JVM不能分配一个包含那么多元素的列表”因为java是垃圾,为什么还有人使用它it@Michael您知道哪些语言可以分配无限大的列表?(我不是指能够处理无限大数据流的语言,因为Java也可以)@Michael实际上,这不是JVM的问题,而是OP的机器没有足够的RAM来容纳无限列表的问题。@Michael我不想暗示你这么说,我只是向你们两个发表了评论。实际上,您可能会认为当前的JVMs /JRE不够,即使是用无限RAM,它们也不能创建这样的列表,但是由于缺少无限RAM,我们将永远不会达到这个限制。我们可以通过从不从
collect
返回来模拟正确的行为,但这是否是一种改进,仍有争议。