1

所以在我的程序中,我有几个不同的对象存储到一个数组中。我随机生成一个作为数组索引的数字,并克隆该对象(九次)以在我的屏幕上创建一个 3x3 的对象网格。

现在我的问题是,在我拥有 3x3 网格之后,我希望能够擦除它并在数组中生成一个新的对象网格。问题是我想不出如何摆脱所有这些克隆,只是将它们移出显示器,这似乎是浪费内存。我想做 400 次试验,所以到最后会有很多克隆的对象。

有没有办法可以删除这些克隆的对象?我必须创建新对象,因为我的数组中的一个对象可能会在网格中使用两次。

4

3 回答 3

2

我认为java垃圾收集器会为你做这件事。当一个对象没有被任何人引用时,当系统识别到它时它将被删除;但是当您说“将它们移出显示器”时,您是什么意思?如果它们是“图形对象”,它们应该在其他对象(如 JFrame)内,因此您必须使用一种方法来告诉 JFrame 对象(或其他)丢弃引用或用另一个对象覆盖引用。

于 2010-11-20T19:16:23.150 回答
0

它有助于意识到您不是在处理实际对象,而是在处理内存中对象的指针或引用。所以:

Object obj = new Object();

不是对象,而是指向内存中对象的链接。通过将链接设置为 null 或将其替换为指向另一个对象的链接来删除链接,旧对象将被删除……ish。当垃圾收集运行时,它会被删除。所以:

obj = null;

obj = new Object();

本质上将删除旧对象。这同样适用于对象数组,您处理的不是实际对象数组,而是对象链接数组。因此,通过将数组中的位置设置为 null 或将位置设置为新对象,旧对象将被删除。所以:

ObjArray[4] = null;

ObjArray[4] = new Object;

将删除旧对象。

编辑:我想我忘了提及,内存中的单个对象可以有多个链接,直到所有这些链接都被删除,该对象才能被垃圾收集删除。

Object obj = new Object();
ObjArray[4] = obj;
obj=null;

在上述情况下,当 obj 设置为 null 时,最初创建的对象不会被删除,这是因为指向它的链接仍然存在于 ObjArray 中。在对象消失之前,您必须将 obj 和 ObjArray[4] 都设置为 null。

于 2010-11-20T19:39:02.263 回答
0

因为引用仍然保留在容器内。我认为您已经做过类似的事情: myJFrameObject.getContentPane.add(object_to_display); 所以引用在 myJFrameObject 中,例如,您可以使用 myJFrameObject.getContentPane.remove。如果您愿意,可以使用 setVisible(false) 隐藏框架。这取决于实际情况。

于 2010-11-20T20:29:03.020 回答