在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,因为内容未被复制,f2
和 f1
现在指向同一事物 m1 或 m2?在 GC 完成它的工作之前,这是否会导致未使用的内存?
欢迎就此发表任何解释或意见。
最佳答案
f2
之前引用的对象不可访问,将在内存中等待,直到 GC 开始处理它。
现在理论上可以在该空间中创建新对象,因为它不再被使用。但是我不知道有任何 GC 算法可以进行这种“热交换”,而且它可能效率很低。该算法将变得更加复杂,内存使用方面的优势将变得微乎其微。它仍然需要“标记”阶段来识别等待收集的对象。
关于java - 重新分配引用对象时对内存的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48381815/