sim*_*ion 9 java memory algorithm garbage-collection reference-counting
在我正在修改的幻灯片上说如下:
可以通过维护对每个对象的引用数量的计数,或者通过跟踪来自根的引用链来识别活动对象.
引用计数很昂贵 - 每次参考更改时都需要操作,并且它不会发现周期性结构,但它可以递增地回收空间.
跟踪涉及仅在需要回收空间时识别活动对象 - 将成本从一般访问转移到GC运行的时间,通常仅在内存不足时.
我理解为什么引用计数很昂贵的原则,但不明白什么"没有发现周期性结构,但它可以逐步回收空间".手段.有人能帮我一点吗?
谢谢
参考计数没有发现周期性结构......
假设你有两个对象O1和O2.它们互相引用:O1 - > O2和O2 - > O1,没有其他对象引用它们.它们都有引用计数1(一个引用者).
如果无法从GC根目录访问O1或O2,则可以安全地对其进行垃圾回收.但是,通过计算引用不会检测到这一点,因为它们的引用计数都大于0.
对于有资格进行垃圾收集的对象,0引用是足够但不是必需的.
......但它可以逐步回收空间.
增量部分指的是这样一个事实,即您可以快速收集一些0引用的对象,中断并在其他时间继续而不会出现问题.
如果跟踪算法被中断,则需要在下次调度时从头开始.(引用树自启动以来可能已经改变了!)