我知道原始类型的数组在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/