问题标签 [gc-roots]
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.
java - 堆栈垃圾是用 Java 收集的吗?
堆内存是 Java 中的垃圾收集器。
堆栈垃圾是否也被收集?
堆栈内存是如何回收的?
.net - 根源是什么?
垃圾收集的根源是什么?
我已将 root 的定义读为“您的程序可以访问的任何引用”,而 live 的定义是正在使用的对象,它可以是局部变量、静态变量。
我对区分根对象和活动对象之间的区别有点困惑。
什么是root路径?根对象和活动对象如何工作?
有人可以详细说明吗?
c# - GC 根和局部变量
在查看Timer 文档时,我遇到了以下带有此注释的示例:
这是否意味着允许 C# 中的 GC 垃圾收集局部变量,即使它会产生副作用?大概是因为之后我不再访问计时器,GC 可以更早地收集它?
如果我正确理解这一点,我不确定我是否喜欢这种优化(但我可能不会;))
java - 垃圾收集器如何识别根
标记-清除垃圾收集器的第一阶段是标记(查找)堆上的所有活动对象。为此,必须有一个起点或根,所有标记都从这里开始。GC 如何识别这样的根?
c - 在 C 中寻找垃圾收集的根源
我正在尝试在 C 中实现一个简单的标记和清除垃圾收集器。算法的第一步是找到根。所以我的问题是如何在 C 程序中找到根源?
在使用 malloc 的程序中,我将使用自定义分配器。这个自定义分配器就是将从 C 程序调用的所有内容,并且可能是自定义 init()。
垃圾收集器如何知道程序中的所有指针(根)是什么?另外,给定一个自定义类型的指针,它如何获取其中的所有指针?
例如,如果有一个指针 p 指向一个类列表,它里面有另一个指针..说 q。垃圾收集器如何知道它,以便它可以标记它?
更新:如果我在初始化时将所有指针名称和类型发送给 GC 怎么样?同样,也可以发送不同类型的结构,让GC遍历树。这甚至是一个理智的想法还是我只是疯了?
compiler-construction - 如何在堆栈机器中找到 gc 根?
我正在为相当标准的堆栈机器编写编译器。现在我想添加一个垃圾收集器。我可以看到我可以生成某种“堆栈映射”来了解每个激活记录中哪些变量是 gc 根。但是,我不知道如何处理在执行期间压入堆栈的中间值。我正在编译的语言类似于 Pascal,所以我不需要也不想使用标签来识别来自其他数据类型的指针。
我将不胜感激有关如何
- 在任意时间点查找堆栈中的gc根(即如何识别已压入堆栈的中间值中哪些是gc根)。
- 编码此信息的常用形式(即,如何生成和编码“堆栈图”)
非常感谢!尼古拉斯
java - Java垃圾收集 - 查找根节点集
在每次垃圾回收开始时,GC 线程需要找出根节点的集合,即位于可达性层次结构顶部的那些对象。有谁知道这个过程是如何实现的?是否维护列表并在堆栈帧推送/弹出时添加/删除新对象?JVM 是否扫描堆栈并找出什么是对象,什么不是(如果是,如何?)?此外,在流程期间可用的静态成员怎么样,它们是否以某种方式被添加到列表中?
非常感谢您提供的任何信息。
java - 线程作为 GC 根
我有一个关于 GC 根的问题。我读到 GC 的根源之一是“实时线程”。这意味着什么?
我一直有这样的印象,每个线程都有自己的堆栈,堆栈的局部变量是线程的 GC 根,现在我很困惑。线程表示还有哪些其他类型的对象引用,它们不在帧堆栈或本机堆栈上?
另一个问题是年轻代收集是否使用 GC 根,还是仅用于主要算法?
谢谢
更新:好的,抱歉,为了简单起见:我已经阅读了这篇简短的文章:yourkit.com/docs/java/help/gc_roots.jsp,并且有一个“线程”选项作为 GC 根,这到底意味着什么线程是 GC 根吗?什么样的对象被 Thread GC root 引用,而不被它的栈引用?为什么这两个类别不同?
garbage-collection - .net GC 中的卡表和写屏障
任何人都可以在.Net 的垃圾收集过程中解释卡表的概念和编写障碍吗?我真的无法得到这些术语的解释,即它们是什么,它们如何有用以及它们如何参与 GC。任何帮助将非常感激。
java - 为什么非静态字段不能充当 GC 根?
据我所知,静态字段(以及线程、局部变量和方法参数、JNI 引用)充当 GC 根。
我无法提供可以证实这一点的链接,但我已经阅读了很多关于它的文章。
为什么非静态字段不能充当 GC 根?