garbage-collection - 保守垃圾收集器

标签 garbage-collection

我已经看到垃圾收集器被标记为很多东西,例如代代相传等等。但是我已经看到Boehm GC被标记为“保守”了。这到底是什么意思呢?

最佳答案

垃圾收集器必须扫描所有对象和调用(执行堆栈)以识别执行程序中的所有“ Activity ”地址,然后“收集”没有“ Activity ”地址的对象。在某些环境中,GC算法可能是精确的,并且确切地知道什么是对象地址,什么不是。在其他环境中,它必须扫描存储的某些部分(最主要是执行堆栈),其中有存储字可能是对象地址,并保守地假设它看起来像有效地址,并且有一个对象具有该地址地址,则不应收集对象。

保守的收集有很多优点,最显着的是,代码生成器(如果不解释的话)可以更自由地在需要变量的位置和时间分配变量,并且不必严格跟踪对象指针。 (除了要使代码生成器变得更加复杂之外,需要跟踪对象指针的位置可能导致优化效果欠佳的代码。而且,保守的收集器有一定的合理机会与从未打算支持的编译器一起使用。垃圾收集,而精确的收集器则需要对编译器进行彻底的更改。)

保守方法的主要缺点是无法实现完整的“复制”收集器。复制完成后,必须更新指向复制对象的指针,并且如果不清楚给定的位值是对象指针还是数字值,则不能安全地确定在对象被赋值时是否应修改它。复制。还有一个缺点是,由于看起来像它们地址的随机位模式,某些“死”对象可能最终没有被收集,尽管实际上这并不是一个严重的问题。

关于garbage-collection - 保守垃圾收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629446/

相关文章:

java - 大堆的 G1GC 日志舍入值

java spring 和 bean 垃圾回收

python - 什么时候收集 python 类和类属性垃圾?

c# - 如何在 C# 中捕获 'FatalExecutionEngineError'?

c# - WPF View 模型 GC

java - 高峰请求到来时,Java GC频繁且时间长,导致应用停止响应10分钟

java - 为什么没有立即收集 'invisible' 对象?

java对象在多个线程之间共享,何时垃圾收集?

java - 如何在没有 X11 的情况下从 Linux 控制台触发手动 Java GC

c# - 超出范围后进程仍在运行 - 这安全吗?