java - 重新分配引用对象时对内存的影响

标签 java memory reference garbage-collection

在java中使用new关键字时,会分配内存,但是我这里很困惑:

Foo f1 = new Foo(); //consumes memory m1
Foo f2 = new Foo(); //consumes memory m2
f2=f1; //Now, f2 just points to f1, so what about the memory m2

内存 m2 是否只是等待 GC,因为内容未被复制,f2f1 现在指向同一事物 m1 或 m2?在 GC 完成它的工作之前,这是否会导致未使用的内存?

欢迎就此发表任何解释或意见。

最佳答案

f2 之前引用的对象不可访问,将在内存中等待,直到 GC 开始处理它。

现在理论上可以在该空间中创建新对象,因为它不再被使用。但是我不知道有任何 GC 算法可以进行这种“热交换”,而且它可能效率很低。该算法将变得更加复杂,内存使用方面的优势将变得微乎其微。它仍然需要“标记”阶段来识别等待收集的对象。

关于java - 重新分配引用对象时对内存的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48381815/

相关文章:

linux - 使用 'push' 或 'sub' x86 指令时如何分配堆栈内存?

java - 处理 Hadoop 中 reduce 步骤的大输出值

c++ - 为什么使用一个构造函数初始化引用成功但另一个构造函数失败

C++ 常量赋值

java - 如何避免在android中方向改变时生成随机数

java方法在其原型(prototype)中抛出异常,但在其主体中不抛出任何异常

java - Checkstyle 结果集中的魔数(Magic Number)

ios - UIImage方法 "drawInRect"的内存泄漏

regex - Textwrangler grep regexpression 引用?

java - 简单的字符串错误