问题标签 [mark-and-sweep]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1254 浏览

c - 在 C 中实现标记清除垃圾收集器

我在 C 中有这个问题,我必须实现一个垃圾收集器。我坚持这样一个事实,即我被赋予了 4 个功能来完成,并且不确定它们如何相互连接。我不知道该怎么办。这是我到目前为止所拥有的:

0 投票
0 回答
2092 浏览

java - 标记和扫描与自动引用计数

众所周知,HotSpot JVM 使用并发的 Mark-and-Sweep垃圾回收器来释放堆上未使用的对象。从某种意义上说,这很有用,因为程序员在编写程序时不必处理内存,但偶尔会出现“GC 延迟”,它会释放所有未使用的对象。

同样,新的Swift编程语言还利用了一个名为 ARC 的自动内存管理系统,该系统与自动参考计数一起工作。这种垃圾回收的问题是循环引用,必须由程序员专门处理和引用以避免内存泄漏。weakunowned

但是两者之间还有其他显着差异吗?在哪些情况下,一种比另一种更好或更差?

0 投票
1 回答
1356 浏览

java - V8 如何管理它的堆?

我知道当 V8 的垃圾收集器工作时,它会从 GC 的根开始跟踪,以便标记无法访问的对象,然后将其清扫。我的问题是 GC 遍历是如何遍历这些对象的?必须有一个数据结构来存储所有可访问或不可访问的对象。位图?联表?

顺便说一句,JVM 也会这样做吗?

0 投票
5 回答
2823 浏览

algorithm - 扫描线算法 - 一维平面的实现

问题很简单,平面上有一些给定的一维线。我们需要找到至少有一行的空间的总大小。

让我用一个示例图像来讨论这个问题 -

森尼亚里奥 1

这可能是一个案例。或者

世纪 2

这可能是一个案例或类似的事情。

我知道这是Sweep Line Algorithm的一个基本问题。

但是互联网上没有适当的文档可以正确理解。

我拥有的最好的一个是Top Coder的博客,就在这里

但目前尚不清楚如何实现它或如何进行模拟。

如果我愿意,我们可以用 2 个循环在 O(n^2) 中完成,但我不知道这个过程会如何。

还是有比 O(n log n) 更好的算法?

任何人都可以通过分享任何 Sudo 代码或模拟来帮助我吗?

如果 Sudo 代码或示例代码不可用,那么从我可以实现的地方进行模拟就足够了。


重新 计算重叠日期范围的问题不是我想要的,因为首先,它是 O(n^2),所以这不是我想要的。它并没有像这个问题那样被完全描述。

0 投票
1 回答
116 浏览

javascript - 你可以关闭 javascript 垃圾收集器的调试模式吗?

当我调试 javascript 时,我经常遇到由于范围问题而无法访问应该通过闭包提供给我的变量的情况。

对于这种情况,我可以遍历堆栈级别以将自己置于正确的范围内,但这非常令人困惑,并且在处理 promises / async 调用时不起作用。

我相信这是垃圾收集器标记并清除未使用变量的功能(如果我错了,请纠正我)。

是否有一种模式可以用来保存闭包变量(是的,我意识到这不会导致垃圾收集,但在调试时仍然有用,并且不应该影响应用程序的行为)

有这个问题的代码:

- - - - - - 编辑 - - - - - - -

更新示例

0 投票
1 回答
157 浏览

c++ - AST 解释语言的 Stop-the-world 垃圾收集:防止应用程序线程等待一个

我正在用 C++ 开发一种 AST 解释的脚本语言。解释器有一个简单的 stop-the-world 标记和清除垃圾收集器,每当触发收集时,它会向所有应用程序线程发送停止请求,然后等待所有线程暂停。每个线程只有一个可以接受gc请求的安全点,放置在一个方法exec()中,每次执行一行解释代码时都会调用该方法,如下所示:

和垃圾收集器:

}

问题是:语言支持本地函数调用,但是在当前系统中,如果一个线程正在执行一个需要很长时间的本地调用(例如本地sleep函数),所有其他应用程序线程垃圾收集器线程将等待该线程到达安全点,以便可以执行垃圾收集。有没有办法避免这种情况?

0 投票
0 回答
84 浏览

algorithm - 在标记和清除中,在什么情况下堆栈会比分配的堆节点持有更多的指针?

我不确定我们将如何遇到指针比堆栈上分配的堆节点更多的情况?我试图理解标记和扫脸,这释放了无法访问的节点,但是我们什么时候会有比节点更多的指针?

0 投票
1 回答
124 浏览

java - GC 如何在 GC 循环期间停止清理新创建的内存/对象(Java/C#)

假设我们采用如下示例代码

在上面的代码中,我假设首先为 Employee Object 分配堆内存,然后将其引用分配给堆栈引用e

以上是有效的还是这里发生了一些深层次的事情?

如果是,那么让我们假设在堆中的内存创建之后并且就在其引用分配给之前e,GC 启动并确定没有来自 GC 根的对该新堆内存的引用。

  1. GC 会清理这个资源吗?
  2. JVM/CLR 有没有办法处理这些场景并避免这种内存损坏?

标记 Java 和 C#,因为我看到 Java 和 C# 的标记和扫描情况下的清理逻辑似乎几乎相同(至少在从根中识别未使用的对象和清理方面)。

0 投票
1 回答
132 浏览

javascript - 哪些现代浏览器使用标记和扫描算法进行垃圾收集?

在进行垃圾收集时,我遇到了Reference CountingGCMark & Sweep算法。
网络上的一些研究表明,引用计数已成为过去,今天的大多数浏览器都采用了 Mark and Sweep。根据这里的文章

虽然我还没有找到任何相同的标准文档,但我很想知道以下内容:

  1. 除了循环依赖之外,还有其他原因使我们远离引用计数并采用 Mark & Sweep 吗?
  2. 所有现代浏览器(Chrome | Firefox | Safari | Edge | IE)都使用 Mark and Sweep 吗?
0 投票
1 回答
335 浏览

java - java垃圾收集技术中使用的常见数据结构

我多次遇到以下问题:

垃圾回收中使用了哪些数据结构?

我还没有找到很多关于 GC 算法中使用的数据结构的资源。

编辑:我知道这个问题似乎太宽泛了,因为有不同种类的垃圾收集技术。我们可以使用常用的垃圾收集算法,比如最流行的 JVM 中的那些。