假设我有两个WeakMaps:
a2b = new WeakMap<A, B>();
b2a = new WeakMap<B, A>();如果我现在这样做:
a2b.set(a, b);
b2a.set(b, a);这会使a和b同时存活吗?如果没有其他人持有a或b,它们是否会最终确定?
发布于 2022-10-12 02:51:19
它们将被收集起来。Firefox有约:内存,它允许您手动触发跨页面的垃圾收集。
发布于 2022-10-12 03:10:48
不,这不能让物体存活。
活性取决于gc根的可达性,而不是循环推理。如果没有其他任何东西使对象保持活力,它们就会被垃圾收集--循环依赖于彼此的活性并不重要。
如果a和b都是活动的,则b2a对象将保持活动状态。
如果b和a都是活动的,则a2b对象将保持活动状态。
如果两个人都死了,他们就活不下去了。
https://stackoverflow.com/questions/72391188
复制相似问题