From 223e3b2cf490caea99d0a3ca8f3cf07975d46cd6 Mon Sep 17 00:00:00 2001 From: weiweitop Date: Mon, 25 Apr 2022 16:40:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=B8=80=E5=A4=84=E5=BE=88=E5=B0=8F?= =?UTF-8?q?=E7=9A=84=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_What_Is_Garbage_Collection_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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) From e5ff86ee114b3efbfd92bf600edb854ea98f351b Mon Sep 17 00:00:00 2001 From: weiweitop Date: Mon, 25 Apr 2022 17:24:41 +0800 Subject: [PATCH 2/2] =?UTF-8?q?pointer=20bumping=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 03_GC_Algorithms_Basics_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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)