我正在编写一个包含世代垃圾收集器的程序。只有两代人。我想知道的是:在进行全面收集时,我是通过先收集年轻的物体,将幸存者提升到老一代,然后收集老一代,或者我只是垃圾收集所有东西来获得任何东西(性能方面)一扫?我不确定人们通常会采用哪种方式。
我现在正在使用两步法,因为它实现起来有点简单,但也许一步法更有效?
如果重要的话,垃圾收集器是非复制的。
答案 0 :(得分:5)
这取决于你促进幸存者的频率。如果你经常推广它们,那么看起来你通过一次扫描做GC会做得更好。如果你不这样做,那么看起来它们会非常相似。
无论哪种方式,看起来好像你分两个阶段做了一些冗余的工作。例如,任何获得晋升的人都会被固有地检查两次(一次是年轻的,一次是旧的)。同样,如果这种情况不经常发生,我会坚持使用更简单的两步法(因为你已经有了它,并且几乎无法获得)。