代码之家  ›  专栏  ›  技术社区  ›  Cosmos Man

当对象在运行时取消分配时,请确保为nil或null值

  •  1
  • Cosmos Man  · 技术社区  · 6 年前

    参考计数和弧透视图
    他们怎么做到的?

    手动内存管理透视图

    自动GC透视图
    在Java中,VM监视对象用时间间隔引用用法并收集它们。不需要设置空值。但有一种 WeakReference

    我的问题是,从编译器或VM的角度来看,如何确保 nil null

    1 回复  |  直到 6 年前
        1
  •  1
  •   torek    6 年前

    作为 Holger says in a comment 参考计数

    class LinkedList(object):
        def __init__(self, next = None):
            self.next = next
        def set_next(self, next):
            self.next = next
    ...
    e1 = LinkedList()
    e2 = LinkedList(e1)
    e1.set_next(e2)
    

    (用Python表示)。当e1.next.next也是e1,而e1.next.next.next是e1,依此类推时,e1的引用计数是多少?(或者,更简单地说,如果我们将e1.next设置为e1本身呢?)

    传统的Lisp垃圾收集始于 Mark and Sweep algorithms the main wikipedia article 尤其是更全面的 Tracing Garbage Collection 文章。

    查找缓存 ,如果存在一些复杂的数据结构,例如基于磁盘B树的数据库或类似数据库,其中一些对象可能会被带到内存中使用一段时间,我们希望有一种快速的方法来确定它们是否仍然可用: dictionary[key] 会很快但是 弱参考 到目标,而 database.load(key) 返回 强引用

    许多实现细节都源于诸如语言本身是否允许以及如何允许您使用指针等问题。带有指针操作的语言(如C++)使得很难进行其他语言(如GO)更容易的编译时分析。

    Mike Ash's blog Martin R's comment ,对其中的几个问题和实际实现进行了很好的总结,包括在Swift中使用的两个问题。

    围棋语言使用 escape analysis 在堆栈上分配一些对象,在垃圾收集堆中分配其他对象。