【发布时间】:2013-08-03 00:09:06
【问题描述】:
在 .NET/Java 中,您可以将引用包装在具有与垃圾收集器相关的神奇属性的类中(例如 WeakReference 等)
对于“不遵循”引用的想法似乎没有这样的类 - 即一种告诉垃圾收集器从指定引用开始有一个复杂的对象子图并且不应该收集它的方法. (所以不要浪费 CPU 周期来标记和扫描该子图)。
有人知道为什么没有这个功能吗?
非常感谢
【问题讨论】:
-
对象仍然需要被遍历,因为它们可能引用其他对象。基本上,它们将成为根集的补充。
-
通过将它们标记为“不关注”,您会说应该保留它们引用的任何内容。并且可能从 gc 第一次将引用观察为“不遵循”的点来看,它应该假设下面包含的子图是不可变的。
-
GC 需要以某种方式确保该图中的每个引用都是不可变的。否则,可能会收集违反语言和虚拟机安全的引用对象。
-
是的 - 我猜它可以将它复制到一个单独的内存区域,这会在随后写入时引发访问冲突。
标签: java .net garbage-collection pass-by-reference