java - 如果Java有垃圾回收,那为什么会出现OutOfMemoryError呢?

标签 java garbage-collection out-of-memory

<分区>

这是一个理论问题。我只是好奇,如果 Java 有垃圾收集机制来释放内存,那么为什么仍然会发生 OutOfMemoryError

我搜索了这个但是可以获得这些链接

Is the garbage collector guaranteed to run before Out of Memory Error?

Garbage collection before OutOfMemoryError

这些并没有具体回答我的问题。如果 Java 通过使用垃圾收集允许内存如此好,那么为什么会发生 OutOfMemoryError

最佳答案

如果内存中没有对象符合垃圾回收条件,则会发生 OutOfMemoryError。例如:

List<MyClass> hellos = new ArrayList<>();
for (;;) {
   hellos.add(new MyClass());
}

这将创建一个列表并不断向其中添加 MyClass 对象,直到内存耗尽。没有对象符合垃圾回收条件,因为存在对所有对象的引用。

关于java - 如果Java有垃圾回收,那为什么会出现OutOfMemoryError呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17288128/

相关文章:

java - 具有在 java 中标记为 protected 字段的 Scala 类

gradle 中的 javadoc 任务 - 链接到 Oracle 的 javadoc,而不是到处显示未链接的限定类名

android - 大量 GC_CONCURRENT 释放的消息,不是我的应用程序

garbage-collection - Racket 中的尾调用优化

Android OutOfMemory 问题

java - 有效地删除 Java 中 arraylist 中每个数组的第一个元素

java - 如何使用 CachedRowSet 进行 SQL 查询?

java - 循环从层次结构的不同文件夹中读取多个文件

python - Python的垃圾回收能保证在任何情况下都回收循环引用对象吗?

android - 在 Android 中显示来自服务器字节数组的图像