繁体   English   中英

在方法中本地创建的对象的垃圾收集

[英]Garbage collection of objects created locally in a method

我认为如果 object 在一个方法中本地创建并且永远不会泄漏到外部,那么一旦该方法执行完成,object 将有资格进行垃圾收集。

但我很困惑,因为我读到有 4 个 GC 根 - 其中一个是线程 object,所以我很困惑,方法局部对象只有在它所在的线程获得时才有资格进行垃圾收集创建完成,该线程的GC Root被取下?

此外,如果有人可以阐明方法局部对象如何链接到堆的堆栈区域。

请注意,我已经阅读了有关方法局部对象的 GC,但在任何地方都没有得到明确而详细的答案,所以我提出了这个问题。

将线程调用堆栈视为堆栈帧节点的双向链表。 每个节点引用给定方法的所有局部变量,这些变量又引用任何活动对象。 线程的 GC root 本质上是链表的头节点,垃圾收集跟踪仍然链接的节点,从而找到所有存活的对象。 当一个方法返回时,链表的尾节点被删除,因此它不再被 GC 发现。

实际上,调用堆栈不是以这种方式实现的,但行为本质上是相同的。

方法本地对象一旦停止使用就符合垃圾回收条件,无论该方法是否已完成。

方法实际上与垃圾收集几乎没有任何关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM