【问题标题】:Big O analysis of garbage collection runtime cost垃圾回收运行时成本的大 O 分析
【发布时间】:2010-09-20 10:10:55
【问题描述】:

当推断垃圾收集语言中的运行时成本时,以“n”(列表中的元素数)表示的语句(例如 myList = null;)的成本是多少?为了论证起见,将列表视为引用类型的单链表,无需终结。

更一般地说,我正在寻找有关如何使用 GC 语言分析运行时成本的任何信息。

【问题讨论】:

    标签: garbage-collection big-o


    【解决方案1】:

    我自己的想法是,根据收集器的实现,成本可能是 O(1) 或 O(n)。在标记和清除收集器中,根本无法到达无法到达的对象,因此我可以想象清除它们不会产生任何成本。 (事实上​​,简单地保持对象存活是有持续成本的,大概是通过使用代数来摊销的。)相反,在一个简单的引用计数收集器中,我可以很容易地想象它花费 O(n) 来进行清理......

    在设计算法时,我不清楚如何推理。

    【讨论】:

    • 在“Think Data Structures”一书中,Allen B. Downey 描述了与您在 OP 中相同的情况,并倾向于认为 Java 中的垃圾收集器可能存在 O(N),但不幸的是他没有进一步详细说明,只是说“清除 [方法] 似乎是恒定时间,但考虑一下:当 root 设置为 null 时,垃圾收集器回收树中的节点,这需要线性时间。应该垃圾收集器计数所做的工作?我想是的。”
    【解决方案2】:

    我怀疑您可以假设该语句的 the amortized costs 为 O(1)。在实践中,这就是我所做的,我从未发现让我怀疑这个假设不正确的情况。

    【讨论】:

    • 摊销成本肯定只是 O(1),因为首先分配对象至少需要 O(N)。因此,即使收集器从 O(N) 中取出一个来清除它们,它也已经被之前执行分配所需的 O(N) 操作“支付”了。
    • 我感兴趣的是该语句的最坏情况成本,而不是摊销成本。
    • @pauldoo:在最坏的情况下,垃圾收集器将决定是时候执行完整收集并扫描每个跟踪的对象,其成本不受任何 N 函数的限制。
    • @pauldoo:你在做实时和/或某种嵌入式软件开发吗?还是你只是好奇?
    • 我最近开始学习以最坏情况为目标的数据结构(即,不依赖摊销)。我正在读一本关于这个主题的书,我有点怀疑作者没有讨论由于 GC 而产生的任何“隐藏”成本。在我正在研究的特定数据结构中,可以稍微改变实现以在每个操作中仅释放恒定数量的对象,所以它有点没有实际意义。
    猜你喜欢
    • 2016-06-18
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2012-07-11
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多