gpt4 book ai didi

Java 垃圾回收 5

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:22 25 4
gpt4 key购买 nike

这段代码来自一本书。问题是,

  1. 创建了多少对象
  2. 当到达//do stuff 行时有多少对象符合 gc 条件。

根据书上的答案是5和2。这是代码:

class Dozens {
int[] dz = {1,2,3,4,5,6,7,8,9,10,11,12};
}

public class Eggs{
public static void main(String[] args){
Dozens[] da = new Dozens[3];
da[0] = new Dozens();
Dozens d = new Dozens();
da[1] = d;
d = null;
da[1] = null;
// do stuff
}
}

在回答第一个问题时,你每次实例化Dozens时是否也将int[] dz对象算作一个额外的对象?

同样,当你到达//do stuff时,在计算符合gc条件的对象数量时,对于每个Dozens对象,你是否也计算其中包含的int[] dz对象?

我没有计算 int[] dz 对象,得出答案 5 和 3。

有人可以解释我可能做错了什么吗?

谢谢。

最佳答案

我在下面的代码中添加了注释,以突出显示创建或丢失引用的位置。

计算分配时,必须包括存储在字段 dz 中的数组的分配。我怀疑您将对 da[0] 和 da[1] 的对象引用分配算作分配。因为他们正在复制一个引用,而不是创建一个新对象;它们只影响对象何时可以成为 GCable 而不会创建新对象。

class Dozens {
int[] dz = {1,2,3,4,5,6,7,8,9,10,11,12};
}

public class Eggs{
public static void main(String[] args){
Dozens[] da = new Dozens[3]; // +1 object, the array containing 3 nulls
da[0] = new Dozens(); // +2 objects, Dozens and the array in Dozens.dz
Dozens d = new Dozens(); // +2 objects, Dozens and the array in Dozens.dz
da[1] = d; // +0, d now has two refs to it
d = null; // +0, d now has one ref to it
da[1] = null; // -2, d now has no refs to it so both d and its internal array become available for GC
// do stuff
}
}

将总数加起来,得出 1+2+2=5 次分配。最后的 -2 表明有 2 个对象可用于 GC

关于Java 垃圾回收 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com