diff --git a/01_What_Is_Garbage_Collection_CN.md b/01_What_Is_Garbage_Collection_CN.md index 84e1ecb..15c90b9 100644 --- a/01_What_Is_Garbage_Collection_CN.md +++ b/01_What_Is_Garbage_Collection_CN.md @@ -69,7 +69,7 @@ ## 自动内存管理(Automated Memory Management) -上面的C++代码中,我们要显式地声明什么时候需要进行内存管理。但不能让所有的对象都具备这种特征呢? 那样就太方便了, 开发者不再耗费脑细胞, 去考虑要在何处进行内存清理。运行时环境会自动算出哪些内存不再使用,并将其释放。换句话说, **自动进行收集垃圾**。第一款垃圾收集器是1959年为Lisp语言开发的, 此后 Lisp 的垃圾收集技术也一直处于业界领先水平。 +上面的C++代码中,我们要显式地声明什么时候需要进行内存管理。但能不能让所有的对象都具备这种特征呢? 那样就太方便了, 开发者不再耗费脑细胞, 去考虑要在何处进行内存清理。运行时环境会自动算出哪些内存不再使用,并将其释放。换句话说, **自动进行收集垃圾**。第一款垃圾收集器是1959年为Lisp语言开发的, 此后 Lisp 的垃圾收集技术也一直处于业界领先水平。 ### 引用计数(Reference Counting) diff --git a/03_GC_Algorithms_Basics_CN.md b/03_GC_Algorithms_Basics_CN.md index 610d569..3588062 100644 --- a/03_GC_Algorithms_Basics_CN.md +++ b/03_GC_Algorithms_Basics_CN.md @@ -79,7 +79,7 @@ ### Compact(整理) -**标记-清除-整理算法(Mark-Sweep-Compact)**, 将所有被标记的对象(存活对象), 迁移到内存空间的起始处, 消除了标记-清除算法的缺点。 相应的缺点就是GC暂停时间会增加, 因为需要将所有对象复制到另一个地方, 然后修改指向这些对象的引用。此算法的优势也很明显, 碎片整理之后, 分配新对象就很简单, 只需要通过指针碰撞(pointer bumping)即可。使用这种算法, 内存空间剩余的容量一直是清楚的, 不会再导致内存碎片问题。 +**标记-清除-整理算法(Mark-Sweep-Compact)**, 将所有被标记的对象(存活对象), 迁移到内存空间的起始处, 消除了标记-清除算法的缺点。 相应的缺点就是GC暂停时间会增加, 因为需要将所有对象复制到另一个地方, 然后修改指向这些对象的引用。此算法的优势也很明显, 碎片整理之后, 分配新对象就很简单, 只需要通过指针提升(pointer bumping)即可。使用这种算法, 内存空间剩余的容量一直是清楚的, 不会再导致内存碎片问题。 ![](03_03_GC-mark-sweep-compact.png)