java - 关于垃圾收集和引用

标签 java garbage-collection reference

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

当调用带有参数的方法时,比如说一个数组,它会被发送一个被视为参数的数组引用的副本。

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

现在,无论垃圾收集器执行什么操作和移动,调用方法和被调用方法中的数组引用是否相同(垃圾收集器可以将引用从 eden 移动到幸存者 1)?

问题的更简单表达:您可以依赖此引用副本,以便将其用作“通过引用”发送参数的机制吗?

非常感谢! 罗克珊娜

最佳答案

如果您想询问是否可以像这样伪造通过引用:

// 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";
}

...那么是的,这将始终有效,并且不受垃圾收集的影响。

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

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

关于java - 关于垃圾收集和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892922/

相关文章:

java - 如何在 build.xml 中添加一个 .jar?

java - 为什么调用虚拟函数会修复错误?

c++ - 有没有一种很好的方法可以将 std::minmax(a, b) 分配给 std::tie(a, b)?

c# - 结构的公共(public)变量没有改变

java - Android:使用时不显示 strings.xml 中的字符串 (R.string.id)

java - 当相同的键时添加两个映射的值

go - 使用 uintptr 作为弱引用是否安全

PHP变量引用和内存使用

java - Eclipse 决定要毁掉我的生活。团队/来源选项均呈灰色。

apache-flex - Flex 内存限制 - 如何配置