Java GC:通用数组的行是独立对象吗?

rha*_*vin 3 java arrays garbage-collection multidimensional-array

当我做以下事情时:

public double[] someFn()
{
    double[][] b = new double[5][5];
    return b[2];
}
Run Code Online (Sandbox Code Playgroud)

缓冲区b的其余部分是否已准备好用于垃圾箱,或者仍然在某个地方使用ref到第二行停止整个阵列b被收集?

正如我正在谈论'回合通用阵列,我不能测试最终确定...

Jon*_*eet 5

是的,每个元素b只是一个参考double[].每个都可以是对独立对象的引用 - 或者几个元素可以引用相同的数组,或者具有空值.

从元素到包含它的数组没有"反向链接".

基本上,您应该将"多维"数组视为正常数组,其中元素类型恰好是另一个数组.例如:

String foo() {
    String[] array = getStrings();
    return array[0];
}
Run Code Online (Sandbox Code Playgroud)

方法返回的字符串引用对数组一无所知,它引用的字符串对象也不知道.它与数组数组的方式完全相同.

  • @KevinBowersox:Java语言规范是一个好的开始:http://docs.oracle.com/javase/specs/jls/se7/html/index.html (2认同)