Java 关于垃圾收集和引用

Java 关于垃圾收集和引用,java,garbage-collection,reference,Java,Garbage Collection,Reference,我有一个关于java中引用和垃圾收集器的问题 当使用参数(比如数组)调用方法时,会向该方法发送被视为参数的数组引用的副本 假设:垃圾收集器是在调用方法之后,或者在方法内部对所考虑的数组执行操作时触发的 现在,无论垃圾收集器执行了哪些操作和移动,调用方法和被调用方法中的数组引用都是相同的(垃圾收集器可以将引用从eden移动到survivor 1) 这个问题有一个更简单的表达:您能否依赖此引用副本,将其用作“通过引用”发送参数的机制 多谢各位! Roxana如果你想问是否可以像这样假装通过参考传递:

我有一个关于java中引用和垃圾收集器的问题

当使用参数(比如数组)调用方法时,会向该方法发送被视为参数的数组引用的副本

假设:垃圾收集器是在调用方法之后,或者在方法内部对所考虑的数组执行操作时触发的

现在,无论垃圾收集器执行了哪些操作和移动,调用方法和被调用方法中的数组引用都是相同的(垃圾收集器可以将引用从eden移动到survivor 1)

这个问题有一个更简单的表达:您能否依赖此引用副本,将其用作“通过引用”发送参数的机制

多谢各位!
Roxana

如果你想问是否可以像这样假装通过参考传递:

// We'd like to pass x by reference...
String x = "hello";
String[] array = { x };
foo(array);
x = array[0];

...

static void foo(String[] array)
{
    array[0] = array[0] + "foo";
}
。。。然后是的,这将始终有效,并且不受垃圾收集的影响

我个人会尽量避免它,但是的,它会起作用:)


请注意,与实际的按引用传递不同,如果方法引发异常,则方法调用后的赋值将不会发生,因此您将丢失“更改”。

垃圾收集器将删除任何引用都无法访问的对象。在您的示例中,至少有2个引用可用于访问对象。因此,它不会被删除,您可以使用引用来访问它。

一些垃圾收集器通过查找没有引用的对象并回收它们占用的空间来工作


另一些方法是查找所有具有引用的对象,并将它们移动到新的对象空间。移动所有对象后,将回收旧对象空间。在这种情况下,所有的参考都会更新。

是的,这就是我的想法。看到垃圾收集器可以应用于对象的移动,我不确定它是否跟踪原始引用和复制的引用。非常感谢。确实,仍然存在参考文献。但是垃圾收集器会从伊甸园迁移到旧世界,等等。我不确定这些更改是否会影响引用的值我不确定更改是否仅在“基本”对象上进行,还是向其所有副本传播。非常感谢。