任何人都可以解释一下。
垃圾收集器的算法是什么?
垃圾收集器如何在后台运行?
答案 0 :(得分:2)
只有在堆满时才会发生GC。 当垃圾收集器启动时 跑步,它做出了假设 堆中的所有对象都是垃圾。 换句话说,它假设没有 该应用程序的根源是指 堆中的任何对象。现在 垃圾收集器开始走了 根和构建所有的图表 从根到达的对象。对于 例如,垃圾收集器可以 找到指向的全局变量 到堆中的对象。
下图显示了一个堆 几个分配对象的地方 应用程序根1直接引用 对象Obj1,Obj2和应用程序 根2指的是Obj4和obj5。所有的 这些物体成为了它们的一部分 图形。添加对象Obj2时 应用程序根1,收集器 此对象引用的注意事项 对象Obj7也被添加到了 图形。收藏家继续走路 通过所有可到达的对象 递归。
...续here
以下是一些其他链接,可让您阅读垃圾收集:
答案 1 :(得分:1)
以下是GC的基本概念。
==========================================
每个应用程序都有一组根。 Roots标识存储位置,这些位置引用托管堆上的对象或设置为null的对象。
例如:
- 应用程序中的所有全局和静态对象指针。 - 线程堆栈上的任何局部变量/参数对象指针。 - 任何包含指向托管堆中对象的指针的CPU寄存器。 - 从Freachable队列
指向对象的指针活动根列表由实时(JIT)编译器和公共语言运行库维护,并且可供垃圾收集器的算法访问