java - Java的垃圾收集器什么时候回收内存?

标签 java arrays

我知道原始类型的数组在java中隐式初始化为0。 所以如果我有代码:

public class Foo{
    public static void main(String args[]){
        int[] arr = new int[50];
        for(int i = 0; i < 30; i++){
            arr[i] = i;
        }
        for(int i = 0; i < 30; i++){      // This Line
             System.out.println(arr[i]);
        }
    }
}

我想知道从 arr[30] 到 arr[49] 的内存是否已经被有注释的行的垃圾收集器回收了?

最佳答案

I want to know if memory from arr[30] to arr[49] would already have been reclaimed by garbage collector at the line which has the comment?

不,绝对不是。该数组是单个对象。它要么可达,要么不可达...在这种情况下,它仍然可达。

在更复杂的示例中,如果这是一个 String[],我不会期望元素 arr[30] 引用的字符串为 arr [49] 也有资格进行垃圾收集。一个非常智能的 GC可能能够判断数组的哪些部分未使用,并且不包括 GC 根中的那些部分,但我认为我从未见过这种情况。 (一方面,它必须知道没有其他代码曾经引用过该数组。这似乎是一种不寻常的情况,因此可能不值得优化。)

关于java - Java的垃圾收集器什么时候回收内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38391291/

相关文章:

java - 为什么 JDBC 使用原语而不是包装类?

java - 忽略 split() 中的模式

javascript - 如果 Obj 中存在数组,则获取数组项,如果不存在则获取字段

python - 从 Numpy 矩阵构造 Python 集

java - Eclipse 和 JavaScript

java - 如何在 Java 中禁用 ButtonGroup 内的 JRadioButton

java - 是否可以使用一行将流收集到两个不同的集合?

javascript - 数组在拼接后不会改变它的数据。范围问题?

堆上的 C++ 多维数组

java - 在一行中实例化数组的数组