garbage-collection - 垃圾收集器如何知道堆栈帧上的引用?

标签 garbage-collection jvm stack clr

现代垃圾收集器(如在 CLR、JVM 中)使用什么技术来判断哪个 堆对象 引用 从堆栈?

具体来说,VM 如何从知道堆栈开始的位置返回到解释对堆对象的所有本地引用?

最佳答案

在 Java 中(可能在 CLR 中,虽然我不太了解它的内部结构),字节码是用对象与原始信息输入的。因此,字节码中有数据结构描述每个堆栈帧中的哪些变量是对象,哪些是基元。当GC需要扫描根集时,它使用这些StackMapTables区分引用和非引用。

CLR 和 Java 必须有一些这样的机制,因为它们是精确的收集器。有像 boehm collector 这样的保守收藏家将堆栈上的每个偏移量视为可能的指针。他们查看该值(当被视为指针时)是否是堆中的偏移量,如果是,则将其标记为事件的。

关于garbage-collection - 垃圾收集器如何知道堆栈帧上的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795505/

相关文章:

c++ - Direct2D - 没有任何内容被绘制到屏幕上,我在 C++ 中处理数组的方式出了问题

java - 如何在 OpenJDK 中禁用自旋锁同步

algorithm - 在没有堆栈的情况下评估表达式树

flutter - 使用定位的小部件在ListView.builder项小部件上添加小部件

java - UseConcMarkSweepGC 与 UseParallelGC

c# - 如何从多个托管应用程序的大对象堆 LOH 中取回未使用的内存?

java - 我可以在哪里了解 JVM 调试器协议(protocol)?

scala - 部署 Scala/Akka 微服务的规范方法是什么?

c - 使用链表创建堆栈时出错

sql-server - 如何强制文件流垃圾收集器以最高优先级完成其工作?