给定这样的内存状态:
(1) GC root -> A
(2) GC root -> B
(3) B -> GC root其中"->“的意思是”有一个引用“。现在假设从GC root中移除对A和B的引用。我知道A将被垃圾收集,因为它已经无法到达。
但是B呢?它无法从GC root访问,但它引用了GC root,该GC root仍然是活动的。B现在是垃圾收集还是不垃圾?或者换句话说:为了查找孤立对象,分析是从GC根到其他对象的一个方向吗?
发布于 2020-03-30 12:13:14
用于垃圾收集的基本策略是确定堆上的数据是否可以从堆栈中访问。如果不是,就释放它的记忆。
你可以想象这一切
STACK *** HEAP *** HEAP *** STACK
GC root. -> A -> b -> GC root因此,如果删除A,仍然有B到达堆栈,但垃圾收集器永远不会到达B并删除它(它只遍历从左到右/从堆栈到堆)。可以从示例B ->根GC中的堆到达堆栈并不重要。只有堆数据不能从堆栈中到达。
https://stackoverflow.com/questions/60930083
复制相似问题