当对象不再使用但仍然在内存中占用时,我们可以将其称为对象吗?

时间:2012-07-23 14:52:16

标签: java oop memory memory-management garbage-collection

考虑此代码

String variable = "";
variable = "3";
variable = "4";

由于string是不可变的,因此将创建三个对象。但只有值被赋值为“4”的最后一个对象才有效。

根据定义,前一行中使用的对象(变量=“3”和变量=“”)仍然在内存中。

我的问题是,当某个对象不再被引用时,我仍可将其称为对象或仅作为不可用的内存位置

4 个答案:

答案 0 :(得分:1)

对象始终是对象。如果可以到达,则在下一个GC循环中不符合GC条件。否则它有资格获得GC。

答案 1 :(得分:1)

对于初学者,String对象不会在常规堆中创建,而是驻留在字符串池中。因此,即使“”和“3”没有被任何变量引用,它们仍将留在池中,等待将来使用(或销毁)。所以不,他们不在无法使用的内存位置。

要回答你的问题,它们仍将被称为对象。

答案 2 :(得分:0)

我认为您仍然可以将其称为对象,因为您可以将它与this.variable =“3”一起使用; 也许

答案 3 :(得分:0)

它们不再被代码引用,实际上只是内存中某个位置的字节模式,但它们仍然是对象。 GC必须处理对象,以便最终确定它。所以它们仍然“起作用”作为对象......

请参阅:When is the finalize() method called in Java?