From 9a632a54cb26f0296d4105004dfcdbc6fc6f5222 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:02:53 +0700
Subject: [PATCH 01/47] Update article.md
---
.../03-garbage-collection/article.md | 150 +++++++++---------
1 file changed, 75 insertions(+), 75 deletions(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/article.md b/1-js/04-object-basics/03-garbage-collection/article.md
index 72e30469c..e24f6f325 100644
--- a/1-js/04-object-basics/03-garbage-collection/article.md
+++ b/1-js/04-object-basics/03-garbage-collection/article.md
@@ -1,38 +1,38 @@
-# Garbage collection
+# Thu gom rác
-Memory management in JavaScript is performed automatically and invisibly to us. We create primitives, objects, functions... All that takes memory.
+Quản lý bộ nhớ trong JavaScript được thực hiện tự động và vô hình đối với chúng ta. Chúng ta tạo các nguyên hàm, đối tượng, hàm... Tất cả những thứ đó cần bộ nhớ.
-What happens when something is not needed any more? How does the JavaScript engine discover it and clean it up?
+Điều gì xảy ra khi một cái gì đó không còn cần thiết nữa? Làm thế nào để JavaScript engine phát hiện ra nó và dọn sạch nó?
-## Reachability
+## Khả năng tiếp cận
-The main concept of memory management in JavaScript is *reachability*.
+Khái niệm chính về quản lý bộ nhớ trong JavaScript là *khả năng tiếp cận*.
-Simply put, "reachable" values are those that are accessible or usable somehow. They are guaranteed to be stored in memory.
+Nói một cách đơn giản, các giá trị "có thể tiếp cận" là những giá trị có thể truy cập hoặc sử dụng được bằng cách nào đó. Chúng được đảm bảo được lưu trữ trong bộ nhớ.
-1. There's a base set of inherently reachable values, that cannot be deleted for obvious reasons.
+1. Có một tập hợp cơ sở các giá trị vốn có thể truy cập được, không thể xóa vì những lý do rõ ràng.
- For instance:
+ Ví dụ:
- - The currently executing function, its local variables and parameters.
- - Other functions on the current chain of nested calls, their local variables and parameters.
- - Global variables.
- - (there are some other, internal ones as well)
+ - Hàm hiện đang thực thi, các biến cục bộ và tham số của nó.
+ - Các chức năng khác trên chuỗi lệnh gọi lồng nhau hiện tại, các biến cục bộ và tham số của chúng.
+ - Biến toàn cục.
+ - (có một số khác, nội bộ là tốt)
- These values are called *roots*.
+ Những giá trị này được gọi là *root*.
-2. Any other value is considered reachable if it's reachable from a root by a reference or by a chain of references.
+2. Bất kỳ giá trị nào khác được coi là có thể truy cập được nếu giá trị đó có thể truy cập được từ gốc bằng tham chiếu hoặc chuỗi tham chiếu.
- For instance, if there's an object in a global variable, and that object has a property referencing another object, *that* object is considered reachable. And those that it references are also reachable. Detailed examples to follow.
+ Chẳng hạn, nếu có một đối tượng trong một biến toàn cục và đối tượng đó có một thuộc tính tham chiếu đến một đối tượng khác, thì đối tượng *that* đó được coi là có thể truy cập được. Và những thứ mà nó tham chiếu cũng có thể truy cập được. Ví dụ chi tiết để làm theo.
-There's a background process in the JavaScript engine that is called [garbage collector](https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)). It monitors all objects and removes those that have become unreachable.
+Có một quy trình nền trong JavaScript engine được gọi là [bộ gom rác](https://vi.wikipedia.org/wiki/Thu_gom_r%C3%A1c_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)). Nó giám sát tất cả các đối tượng và loại bỏ những đối tượng không thể truy cập được.
-## A simple example
+## Một ví dụ đơn giản
-Here's the simplest example:
+Đây là ví dụ đơn giản nhất:
```js
-// user has a reference to the object
+// người dùng có một tham chiếu đến đối tượng
let user = {
name: "John"
};
@@ -40,9 +40,9 @@ let user = {

-Here the arrow depicts an object reference. The global variable `"user"` references the object `{name: "John"}` (we'll call it John for brevity). The `"name"` property of John stores a primitive, so it's painted inside the object.
+Ở đây mũi tên mô tả một tham chiếu đối tượng. Biến toàn cục `"user"` tham chiếu đối tượng `{name: "John"}` (chúng ta sẽ gọi nó là John cho ngắn gọn). Thuộc tính `"name"` của John lưu trữ một giá trị nguyên thủy, do đó, nó được vẽ bên trong đối tượng.
-If the value of `user` is overwritten, the reference is lost:
+Nếu giá trị của `user` bị ghi đè, tham chiếu sẽ bị mất:
```js
user = null;
@@ -50,14 +50,14 @@ user = null;

-Now John becomes unreachable. There's no way to access it, no references to it. Garbage collector will junk the data and free the memory.
+Bây giờ John trở nên không thể truy cập được. Không có cách nào để truy cập nó, không có tham chiếu đến nó. Trình thu gom rác sẽ loại bỏ dữ liệu và giải phóng bộ nhớ.
-## Two references
+## Hai tài liệu tham khảo
-Now let's imagine we copied the reference from `user` to `admin`:
+Bây giờ, hãy tưởng tượng chúng ta đã sao chép tham chiếu từ `user` sang `admin`:
```js
-// user has a reference to the object
+// người dùng có một tham chiếu đến đối tượng
let user = {
name: "John"
};
@@ -69,16 +69,16 @@ let admin = user;

-Now if we do the same:
+Bây giờ nếu chúng ta làm như vậy:
```js
user = null;
```
-...Then the object is still reachable via `admin` global variable, so it's in memory. If we overwrite `admin` too, then it can be removed.
+...Sau đó, đối tượng vẫn có thể truy cập được thông qua biến toàn cầu `admin`, do đó, đối tượng nằm trong bộ nhớ. Nếu chúng ta ghi đè lên `admin`, thì nó có thể bị xóa.
-## Interlinked objects
+## Các đối tượng liên kết với nhau
-Now a more complex example. The family:
+Bây giờ là một ví dụ phức tạp hơn. Một gia đình:
```js
function marry(man, woman) {
@@ -98,15 +98,15 @@ let family = marry({
});
```
-Function `marry` "marries" two objects by giving them references to each other and returns a new object that contains them both.
+Hàm `marry` "kết hôn" hai đối tượng bằng cách cho chúng tham chiếu lẫn nhau và trả về một đối tượng mới chứa cả hai đối tượng.
-The resulting memory structure:
+Cấu trúc bộ nhớ kết quả:

-As of now, all objects are reachable.
+Hiện tại, tất cả các đối tượng đều có thể truy cập được.
-Now let's remove two references:
+Bây giờ hãy xóa hai tham chiếu:
```js
delete family.father;
@@ -115,98 +115,98 @@ delete family.mother.husband;

-It's not enough to delete only one of these two references, because all objects would still be reachable.
+Chỉ xóa một trong hai tham chiếu này là không đủ, bởi vì tất cả các đối tượng vẫn có thể truy cập được.
-But if we delete both, then we can see that John has no incoming reference any more:
+Nhưng nếu chúng ta xóa cả hai, thì chúng ta có thể thấy rằng John không còn tài liệu tham khảo nào nữa:

-Outgoing references do not matter. Only incoming ones can make an object reachable. So, John is now unreachable and will be removed from the memory with all its data that also became unaccessible.
+Tham chiếu gửi đi không quan trọng. Chỉ những cái đến mới có thể làm cho một đối tượng có thể truy cập được. Vì vậy, John hiện không thể truy cập được và sẽ bị xóa khỏi bộ nhớ cùng với tất cả dữ liệu của nó cũng không thể truy cập được.
-After garbage collection:
+Sau khi thu gom rác:

-## Unreachable island
+## Đối tượng không thể tiếp cận
-It is possible that the whole island of interlinked objects becomes unreachable and is removed from the memory.
+Có thể toàn bộ các đối tượng được liên kết với nhau trở nên không thể truy cập được và bị xóa khỏi bộ nhớ.
-The source object is the same as above. Then:
+Đối tượng nguồn giống như trên. Sau đó:
```js
family = null;
```
-The in-memory picture becomes:
+Hình ảnh trong bộ nhớ trở thành:

-This example demonstrates how important the concept of reachability is.
+Ví dụ này cho thấy tầm quan trọng của khái niệm khả năng tiếp cận.
-It's obvious that John and Ann are still linked, both have incoming references. But that's not enough.
+Rõ ràng là John và Ann vẫn được liên kết với nhau, cả hai đều có tham chiếu sắp tới. Nhưng điều đó là không đủ.
-The former `"family"` object has been unlinked from the root, there's no reference to it any more, so the whole island becomes unreachable and will be removed.
+Đối tượng `"gia đình"` trước đây đã bị hủy liên kết khỏi thư mục gốc, không còn tham chiếu đến nó nữa, vì vậy toàn bộ hòn đảo trở nên không thể truy cập được và sẽ bị xóa.
-## Internal algorithms
+## Thuật toán nội bộ
-The basic garbage collection algorithm is called "mark-and-sweep".
+Thuật toán thu gom rác cơ bản được gọi là "đánh dấu và quét".
-The following "garbage collection" steps are regularly performed:
+Các bước "thu gom rác" sau đây được thực hiện thường xuyên:
-- The garbage collector takes roots and "marks" (remembers) them.
-- Then it visits and "marks" all references from them.
-- Then it visits marked objects and marks *their* references. All visited objects are remembered, so as not to visit the same object twice in the future.
-- ...And so on until every reachable (from the roots) references are visited.
-- All objects except marked ones are removed.
+- Bộ gom rác lấy gốc và "đánh dấu" (ghi nhớ) chúng.
+- Sau đó, nó truy cập và "đánh dấu" tất cả các tham chiếu từ họ.
+- Sau đó, nó truy cập các đối tượng được đánh dấu và đánh dấu các tham chiếu *của chúng*. Tất cả các đối tượng đã truy cập đều được ghi nhớ để không truy cập cùng một đối tượng hai lần trong tương lai.
+- ...Và cứ như vậy cho đến khi mọi tham chiếu có thể truy cập (từ gốc) đều được truy cập.
+- Tất cả các đối tượng trừ những đối tượng được đánh dấu đều bị xóa.
-For instance, let our object structure look like this:
+Chẳng hạn, hãy để cấu trúc đối tượng của chúng ta trông như thế này:

-We can clearly see an "unreachable island" to the right side. Now let's see how "mark-and-sweep" garbage collector deals with it.
+Chúng ta có thể thấy rõ ràng một "đối tượng không thể tiếp cận" ở phía bên phải. Bây giờ hãy xem bộ gom rác "đánh dấu và quét" xử lý nó như thế nào.
-The first step marks the roots:
+Bước đầu tiên đánh dấu gốc:

-Then their references are marked:
+Sau đó, tham chiếu của họ được đánh dấu:

-...And their references, while possible:
+...Và tham chiếu của họ, trong khi có thể:

-Now the objects that could not be visited in the process are considered unreachable and will be removed:
+Bây giờ các đối tượng không thể truy cập được trong quy trình được coi là không thể truy cập và sẽ bị xóa:

-We can also imagine the process as spilling a huge bucket of paint from the roots, that flows through all references and marks all reachable objects. The unmarked ones are then removed.
+Chúng ta cũng có thể tưởng tượng quá trình này giống như đổ một thùng sơn khổng lồ từ gốc, chảy qua tất cả các tham chiếu và đánh dấu tất cả các đối tượng có thể tiếp cận. Những cái không được đánh dấu sau đó được loại bỏ.
-That's the concept of how garbage collection works. JavaScript engines apply many optimizations to make it run faster and not affect the execution.
+Đó là khái niệm về cách hoạt động của thu gom rác. Các JavaScript engine áp dụng nhiều tối ưu hóa để làm cho nó chạy nhanh hơn và không ảnh hưởng đến việc thực thi.
-Some of the optimizations:
+Một số tối ưu hóa:
-- **Generational collection** -- objects are split into two sets: "new ones" and "old ones". Many objects appear, do their job and die fast, they can be cleaned up aggressively. Those that survive for long enough, become "old" and are examined less often.
-- **Incremental collection** -- if there are many objects, and we try to walk and mark the whole object set at once, it may take some time and introduce visible delays in the execution. So the engine tries to split the garbage collection into pieces. Then the pieces are executed one by one, separately. That requires some extra bookkeeping between them to track changes, but we have many tiny delays instead of a big one.
-- **Idle-time collection** -- the garbage collector tries to run only while the CPU is idle, to reduce the possible effect on the execution.
+- **Thu gom thế hệ** -- các đối tượng được chia thành hai bộ: "bộ mới" và "bộ cũ". Nhiều đối tượng xuất hiện, thực hiện công việc của chúng và chết nhanh chóng, chúng có thể được dọn dẹp một cách tích cực. Những người tồn tại đủ lâu, trở nên "già" và ít được kiểm tra thường xuyên hơn.
+- **Tập hợp gia tăng** -- nếu có nhiều đối tượng và chúng ta cố gắng đi bộ và đánh dấu toàn bộ tập hợp đối tượng cùng một lúc, có thể mất một chút thời gian và gây ra sự chậm trễ có thể nhìn thấy được trong quá trình thực thi. Vì vậy, engine cố gắng chia bộ sưu tập rác thành nhiều phần. Sau đó, các mảnh được thực hiện từng cái một, riêng biệt. Điều đó đòi hỏi một số kế toán bổ sung giữa chúng để theo dõi các thay đổi, nhưng chúng ta có nhiều sự chậm trễ nhỏ thay vì một sự chậm trễ lớn.
+- **Thu gom vào thời gian nhàn rỗi** -- bộ thu gom rác cố gắng chỉ chạy khi CPU không hoạt động, để giảm tác động có thể có đối với quá trình thực thi.
-There exist other optimizations and flavours of garbage collection algorithms. As much as I'd like to describe them here, I have to hold off, because different engines implement different tweaks and techniques. And, what's even more important, things change as engines develop, so studying deeper "in advance", without a real need is probably not worth that. Unless, of course, it is a matter of pure interest, then there will be some links for you below.
+Có tồn tại các tối ưu hóa và hương vị khác của thuật toán thu gom rác. Tôi muốn mô tả chúng ở đây nhiều như thế nào nhưng tôi phải dừng lại, bởi vì các công cụ khác nhau thực hiện các chỉnh sửa và kỹ thuật khác nhau. Và, điều quan trọng hơn nữa, mọi thứ thay đổi khi động cơ phát triển, vì vậy việc nghiên cứu sâu hơn "trước", nếu không có nhu cầu thực sự có lẽ không đáng. Tất nhiên, trừ khi đó là vấn đề hoàn toàn vì lợi ích, khi đó sẽ có một số liên kết dành cho bạn bên dưới.
-## Summary
+## Tóm tắt
-The main things to know:
+Những điều chính cần biết:
-- Garbage collection is performed automatically. We cannot force or prevent it.
-- Objects are retained in memory while they are reachable.
-- Being referenced is not the same as being reachable (from a root): a pack of interlinked objects can become unreachable as a whole.
+- Việc thu gom rác được thực hiện tự động. Chúng ta không thể ép buộc hay ngăn cản.
+- Các đối tượng được giữ lại trong bộ nhớ trong khi chúng có thể truy cập được.
+- Được tham chiếu không giống như có thể truy cập được (từ gốc): một gói các đối tượng được liên kết với nhau có thể trở nên không thể truy cập được như một tổng thể.
-Modern engines implement advanced algorithms of garbage collection.
+Các engine hiện đại thực hiện các thuật toán thu gom rác tiên tiến.
-A general book "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) covers some of them.
+Một cuốn sách chung "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) đề cập đến một số trong số chúng.
-If you are familiar with low-level programming, the more detailed information about V8 garbage collector is in the article [A tour of V8: Garbage Collection](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
+Nếu bạn đã quen với lập trình cấp thấp, thông tin chi tiết hơn về trình thu gom rác V8 có trong bài viết [Chuyến tham quan V8: Thu gom rác](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
-[V8 blog](https://v8.dev/) also publishes articles about changes in memory management from time to time. Naturally, to learn the garbage collection, you'd better prepare by learning about V8 internals in general and read the blog of [Vyacheslav Egorov](http://mrale.ph) who worked as one of V8 engineers. I'm saying: "V8", because it is best covered with articles in the internet. For other engines, many approaches are similar, but garbage collection differs in many aspects.
+[Blog V8](https://v8.dev/) thỉnh thoảng cũng xuất bản các bài viết về những thay đổi trong quản lý bộ nhớ. Đương nhiên, để tìm hiểu về thu gom rác, tốt hơn hết bạn nên chuẩn bị bằng cách tìm hiểu về các bộ phận bên trong engine V8 nói chung và đọc blog của [Vyacheslav Egorov](http://mrale.ph), người từng là một trong những kỹ sư của engine V8. Tôi đang nói: "V8", bởi vì nó được đề cập tốt nhất với các bài báo trên internet. Đối với các công cụ khác, nhiều cách tiếp cận tương tự nhau, nhưng việc thu gom rác khác nhau ở nhiều khía cạnh.
-In-depth knowledge of engines is good when you need low-level optimizations. It would be wise to plan that as the next step after you're familiar with the language.
+Kiến thức chuyên sâu về các công cụ rất hữu ích khi bạn cần tối ưu hóa ở mức độ thấp. Sẽ là khôn ngoan nếu bạn lên kế hoạch cho bước tiếp theo sau khi bạn đã quen thuộc với ngôn ngữ này.
From 095158f8f0b7dd40d7f1c4bb0ebda25eb90130a0 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:05:58 +0700
Subject: [PATCH 02/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index a582ca64b..c47cd120e 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From bc09d8a6c61aaafc22189e2c66cb0d3c767c33a4 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:09:50 +0700
Subject: [PATCH 03/47] Update family-no-family.svg
---
.../04-object-basics/03-garbage-collection/family-no-family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
index c73dd6a48..6f6b7b90b 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From ef7dcb87686b328203052071d034eff2321cc49b Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:10:14 +0700
Subject: [PATCH 04/47] Update family-no-family.svg
---
.../04-object-basics/03-garbage-collection/family-no-family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
index 6f6b7b90b..530ffda54 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
@@ -1 +1 @@
-
+
From 614503844435a62504e6253e1af10c3b7183cb10 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:11:18 +0700
Subject: [PATCH 05/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index c47cd120e..8ae39e03c 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
+
From 4dace041de4142f5420883b9036c789da8014f92 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:11:30 +0700
Subject: [PATCH 06/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index 8ae39e03c..5b94adc36 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
+
From 5edfe257f030b8e990525a54c5bc4edfb6975d23 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:11:42 +0700
Subject: [PATCH 07/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index 5b94adc36..149a5dbf4 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
+
From 3d7108f6e84b5c9d0084c1e29a5aac0bd697f65d Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:12:12 +0700
Subject: [PATCH 08/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index 149a5dbf4..54ef83849 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
+
From 68d2e867961a54b4f39e8f83e5a5b5e08d37ada3 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:12:37 +0700
Subject: [PATCH 09/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index 54ef83849..8c5784122 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
+
From b5fada7f2643ace1e807056059f1e78c5e53fbb9 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:12:55 +0700
Subject: [PATCH 10/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index 8c5784122..6edd16079 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
+
From e357ee4a0992a94fabde3e975fdbb4283faa37d8 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:28:44 +0700
Subject: [PATCH 11/47] Update family-no-family.svg
---
.../04-object-basics/03-garbage-collection/family-no-family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
index 530ffda54..8a8e47dc7 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
@@ -1 +1 @@
-
+
From a4e6388a69a0c3a7c01d9513319fab8c571b9a54 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:29:32 +0700
Subject: [PATCH 12/47] Update family-no-family.svg
---
.../04-object-basics/03-garbage-collection/family-no-family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
index 8a8e47dc7..f2ea98006 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
@@ -1 +1 @@
-
+
From f0d6a2f292fee19d34e9147bb353d5288046cf06 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:30:54 +0700
Subject: [PATCH 13/47] Update family-no-father-2.svg
---
.../03-garbage-collection/family-no-father-2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
index 6bd13c0e8..73730f8be 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 7545346a7ae4379a188e0c3554ce0b194851098e Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:31:23 +0700
Subject: [PATCH 14/47] Update family-no-father-2.svg
---
.../03-garbage-collection/family-no-father-2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
index 73730f8be..06d05d246 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
@@ -1 +1 @@
-
+
From 5be09a3dc39e15f17a091c1bfbf9987dfc8ade9c Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:31:38 +0700
Subject: [PATCH 15/47] Update family-no-father-2.svg
---
.../03-garbage-collection/family-no-father-2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
index 06d05d246..7a2b4e547 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
@@ -1 +1 @@
-
+
From 4066ccfb43d6ca8c63dbf30aafd6ed26ce5177e8 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:32:02 +0700
Subject: [PATCH 16/47] Update family-no-father-2.svg
---
.../03-garbage-collection/family-no-father-2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
index 7a2b4e547..98e4419b3 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
@@ -1 +1 @@
-
+
From 4f1245173f6af44eda848ea2e23dea66450a26df Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:33:51 +0700
Subject: [PATCH 17/47] Update family-no-father.svg
---
.../04-object-basics/03-garbage-collection/family-no-father.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
index fd1f20607..ace6ef08d 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 151d7e41e1595a973245a4fa208d38f1fe8eae3e Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:35:19 +0700
Subject: [PATCH 18/47] Update family-no-father.svg
---
.../04-object-basics/03-garbage-collection/family-no-father.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
index ace6ef08d..dd3b1bce9 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
@@ -1 +1 @@
-
+
From b1d97b80d20afaa730f8075d4ccc348ee0851deb Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:35:37 +0700
Subject: [PATCH 19/47] Update family-no-father.svg
---
.../04-object-basics/03-garbage-collection/family-no-father.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
index dd3b1bce9..8344dc2db 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
@@ -1 +1 @@
-
+
From ad90ff4bb1ab2203e2a60f110ee45710f07e230d Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:38:30 +0700
Subject: [PATCH 20/47] Update family.svg
---
1-js/04-object-basics/03-garbage-collection/family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family.svg b/1-js/04-object-basics/03-garbage-collection/family.svg
index fd0534874..fa472beba 100644
--- a/1-js/04-object-basics/03-garbage-collection/family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 7386811476128067bcdc5c2360bfc8b5ef0249d4 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:38:48 +0700
Subject: [PATCH 21/47] Update family.svg
---
1-js/04-object-basics/03-garbage-collection/family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family.svg b/1-js/04-object-basics/03-garbage-collection/family.svg
index fa472beba..659fbe809 100644
--- a/1-js/04-object-basics/03-garbage-collection/family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family.svg
@@ -1 +1 @@
-
+
From 63f0a5c9258d2d22de99d516cc0ea8eac4030cdd Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:39:24 +0700
Subject: [PATCH 22/47] Update family.svg
---
1-js/04-object-basics/03-garbage-collection/family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family.svg b/1-js/04-object-basics/03-garbage-collection/family.svg
index 659fbe809..09d85abd5 100644
--- a/1-js/04-object-basics/03-garbage-collection/family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family.svg
@@ -1 +1 @@
-
+
From 54f722021bfb288cc1f02829079e041fa2ffa1fc Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:39:40 +0700
Subject: [PATCH 23/47] Update family.svg
---
1-js/04-object-basics/03-garbage-collection/family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family.svg b/1-js/04-object-basics/03-garbage-collection/family.svg
index 09d85abd5..2aef2b935 100644
--- a/1-js/04-object-basics/03-garbage-collection/family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family.svg
@@ -1 +1 @@
-
+
From fc878bffe7e230d499c847504cc8af546b784911 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:39:58 +0700
Subject: [PATCH 24/47] Update family.svg
---
1-js/04-object-basics/03-garbage-collection/family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family.svg b/1-js/04-object-basics/03-garbage-collection/family.svg
index 2aef2b935..faf8ca60d 100644
--- a/1-js/04-object-basics/03-garbage-collection/family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family.svg
@@ -1 +1 @@
-
+
From 139d4b04931bbb5d2914874fbb4565997d655d97 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:40:59 +0700
Subject: [PATCH 25/47] Update garbage-collection-1.svg
---
.../03-garbage-collection/garbage-collection-1.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/garbage-collection-1.svg b/1-js/04-object-basics/03-garbage-collection/garbage-collection-1.svg
index 5cac52e9a..3fc95afd4 100644
--- a/1-js/04-object-basics/03-garbage-collection/garbage-collection-1.svg
+++ b/1-js/04-object-basics/03-garbage-collection/garbage-collection-1.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From dfd0638c62f4c7d71bb8a74c70ebbdeb668ae040 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:41:40 +0700
Subject: [PATCH 26/47] Update garbage-collection-2.svg
---
.../03-garbage-collection/garbage-collection-2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/garbage-collection-2.svg b/1-js/04-object-basics/03-garbage-collection/garbage-collection-2.svg
index 7dd3a693a..395bd596b 100644
--- a/1-js/04-object-basics/03-garbage-collection/garbage-collection-2.svg
+++ b/1-js/04-object-basics/03-garbage-collection/garbage-collection-2.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 946b53133b72b247d17d2d4ab2e895bc08c862dd Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:41:57 +0700
Subject: [PATCH 27/47] Update garbage-collection-3.svg
---
.../03-garbage-collection/garbage-collection-3.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/garbage-collection-3.svg b/1-js/04-object-basics/03-garbage-collection/garbage-collection-3.svg
index 106057787..b60e1f526 100644
--- a/1-js/04-object-basics/03-garbage-collection/garbage-collection-3.svg
+++ b/1-js/04-object-basics/03-garbage-collection/garbage-collection-3.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 0c5ee782ab43a085a7e223439a70fb99828109c1 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:42:15 +0700
Subject: [PATCH 28/47] Update garbage-collection-4.svg
---
.../03-garbage-collection/garbage-collection-4.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/garbage-collection-4.svg b/1-js/04-object-basics/03-garbage-collection/garbage-collection-4.svg
index bd485adee..47c758e5a 100644
--- a/1-js/04-object-basics/03-garbage-collection/garbage-collection-4.svg
+++ b/1-js/04-object-basics/03-garbage-collection/garbage-collection-4.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From c7a8b6c99c4a606b689577b46407f49fd16b4ca1 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:43:40 +0700
Subject: [PATCH 29/47] Update memory-user-john-admin.svg
---
.../03-garbage-collection/memory-user-john-admin.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
index 191324354..71d09d50b 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From ac6f2f62b25df1284e9da15ec39c82f81be4ebb0 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:44:21 +0700
Subject: [PATCH 30/47] Update memory-user-john-admin.svg
---
.../03-garbage-collection/memory-user-john-admin.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
index 71d09d50b..4bd1dd813 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
@@ -1 +1 @@
-
+
From ad6f35ce8c958b9144956f45f028d74145b78d65 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:45:14 +0700
Subject: [PATCH 31/47] Update memory-user-john-lost.svg
---
.../03-garbage-collection/memory-user-john-lost.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
index 07914a9ca..b4d9ea6ac 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From e6d04ef3390803849fba0941e9482c8e5be92ebc Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:45:55 +0700
Subject: [PATCH 32/47] Update memory-user-john-lost.svg
---
.../03-garbage-collection/memory-user-john-lost.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
index b4d9ea6ac..e8ccc4343 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
@@ -1 +1 @@
-
+
From b07f85cff76e0beaa51e8a9c9ef2aaca3e3428cf Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:46:13 +0700
Subject: [PATCH 33/47] Update memory-user-john-lost.svg
---
.../03-garbage-collection/memory-user-john-lost.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
index e8ccc4343..6850a0824 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
@@ -1 +1 @@
-
+
From dac8229aea837195fc4e83ab0d1746ef12677d99 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 1 Mar 2023 22:46:46 +0700
Subject: [PATCH 34/47] Update memory-user-john.svg
---
.../04-object-basics/03-garbage-collection/memory-user-john.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg
index 15bd51afb..cef3dc563 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 0bf5a39594e30ae2851705fb5a12d94380f316ae Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Fri, 3 Mar 2023 08:29:37 +0700
Subject: [PATCH 35/47] Update article.md
---
.../03-garbage-collection/article.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/article.md b/1-js/04-object-basics/03-garbage-collection/article.md
index e24f6f325..ebae9ed6b 100644
--- a/1-js/04-object-basics/03-garbage-collection/article.md
+++ b/1-js/04-object-basics/03-garbage-collection/article.md
@@ -15,11 +15,11 @@ Nói một cách đơn giản, các giá trị "có thể tiếp cận" là nh
Ví dụ:
- Hàm hiện đang thực thi, các biến cục bộ và tham số của nó.
- - Các chức năng khác trên chuỗi lệnh gọi lồng nhau hiện tại, các biến cục bộ và tham số của chúng.
+ - Các hàm khác trên chuỗi lệnh gọi lồng nhau hiện tại, các biến cục bộ và tham số của chúng.
- Biến toàn cục.
- (có một số khác, nội bộ là tốt)
- Những giá trị này được gọi là *root*.
+ Những giá trị này được gọi là *gốc*.
2. Bất kỳ giá trị nào khác được coi là có thể truy cập được nếu giá trị đó có thể truy cập được từ gốc bằng tham chiếu hoặc chuỗi tham chiếu.
@@ -52,7 +52,7 @@ user = null;
Bây giờ John trở nên không thể truy cập được. Không có cách nào để truy cập nó, không có tham chiếu đến nó. Trình thu gom rác sẽ loại bỏ dữ liệu và giải phóng bộ nhớ.
-## Hai tài liệu tham khảo
+## Hai tham chiếu
Bây giờ, hãy tưởng tượng chúng ta đã sao chép tham chiếu từ `user` sang `admin`:
@@ -117,7 +117,7 @@ delete family.mother.husband;
Chỉ xóa một trong hai tham chiếu này là không đủ, bởi vì tất cả các đối tượng vẫn có thể truy cập được.
-Nhưng nếu chúng ta xóa cả hai, thì chúng ta có thể thấy rằng John không còn tài liệu tham khảo nào nữa:
+Nhưng nếu chúng ta xóa cả hai, thì chúng ta có thể thấy rằng John không còn tham chiếu nào nữa:

@@ -145,7 +145,7 @@ Ví dụ này cho thấy tầm quan trọng của khái niệm khả năng tiế
Rõ ràng là John và Ann vẫn được liên kết với nhau, cả hai đều có tham chiếu sắp tới. Nhưng điều đó là không đủ.
-Đối tượng `"gia đình"` trước đây đã bị hủy liên kết khỏi thư mục gốc, không còn tham chiếu đến nó nữa, vì vậy toàn bộ hòn đảo trở nên không thể truy cập được và sẽ bị xóa.
+Đối tượng `"gia đình"` trước đây đã bị hủy liên kết khỏi thư mục gốc, không còn tham chiếu đến nó nữa, vì vậy toàn bộ đối tượng trở nên không thể truy cập được và sẽ bị xóa.
## Thuật toán nội bộ
@@ -154,7 +154,7 @@ Thuật toán thu gom rác cơ bản được gọi là "đánh dấu và quét"
Các bước "thu gom rác" sau đây được thực hiện thường xuyên:
- Bộ gom rác lấy gốc và "đánh dấu" (ghi nhớ) chúng.
-- Sau đó, nó truy cập và "đánh dấu" tất cả các tham chiếu từ họ.
+- Sau đó, nó truy cập và "đánh dấu" tất cả các tham chiếu từ chúng.
- Sau đó, nó truy cập các đối tượng được đánh dấu và đánh dấu các tham chiếu *của chúng*. Tất cả các đối tượng đã truy cập đều được ghi nhớ để không truy cập cùng một đối tượng hai lần trong tương lai.
- ...Và cứ như vậy cho đến khi mọi tham chiếu có thể truy cập (từ gốc) đều được truy cập.
- Tất cả các đối tượng trừ những đối tượng được đánh dấu đều bị xóa.
@@ -191,7 +191,7 @@ Một số tối ưu hóa:
- **Tập hợp gia tăng** -- nếu có nhiều đối tượng và chúng ta cố gắng đi bộ và đánh dấu toàn bộ tập hợp đối tượng cùng một lúc, có thể mất một chút thời gian và gây ra sự chậm trễ có thể nhìn thấy được trong quá trình thực thi. Vì vậy, engine cố gắng chia bộ sưu tập rác thành nhiều phần. Sau đó, các mảnh được thực hiện từng cái một, riêng biệt. Điều đó đòi hỏi một số kế toán bổ sung giữa chúng để theo dõi các thay đổi, nhưng chúng ta có nhiều sự chậm trễ nhỏ thay vì một sự chậm trễ lớn.
- **Thu gom vào thời gian nhàn rỗi** -- bộ thu gom rác cố gắng chỉ chạy khi CPU không hoạt động, để giảm tác động có thể có đối với quá trình thực thi.
-Có tồn tại các tối ưu hóa và hương vị khác của thuật toán thu gom rác. Tôi muốn mô tả chúng ở đây nhiều như thế nào nhưng tôi phải dừng lại, bởi vì các công cụ khác nhau thực hiện các chỉnh sửa và kỹ thuật khác nhau. Và, điều quan trọng hơn nữa, mọi thứ thay đổi khi động cơ phát triển, vì vậy việc nghiên cứu sâu hơn "trước", nếu không có nhu cầu thực sự có lẽ không đáng. Tất nhiên, trừ khi đó là vấn đề hoàn toàn vì lợi ích, khi đó sẽ có một số liên kết dành cho bạn bên dưới.
+Có tồn tại các tối ưu hóa và hương vị khác của thuật toán thu gom rác. Tôi muốn mô tả chúng ở đây nhiều như thế nào nhưng tôi phải dừng lại, bởi vì các công cụ khác nhau thực hiện các chỉnh sửa và kỹ thuật khác nhau. Và, điều quan trọng hơn nữa, mọi thứ thay đổi khi engine phát triển, vì vậy việc nghiên cứu sâu hơn "trước", nếu không có nhu cầu thực sự có lẽ không đáng. Tất nhiên, trừ khi đó là vấn đề hoàn toàn vì lợi ích, khi đó sẽ có một số liên kết dành cho bạn bên dưới.
## Tóm tắt
From 1fdf4d01f76100c70ee787b5f2d43419a626ddcd Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:26:43 +0700
Subject: [PATCH 36/47] Update article.md
---
.../03-garbage-collection/article.md | 28 +++++++++----------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/article.md b/1-js/04-object-basics/03-garbage-collection/article.md
index ebae9ed6b..9d9cc30e5 100644
--- a/1-js/04-object-basics/03-garbage-collection/article.md
+++ b/1-js/04-object-basics/03-garbage-collection/article.md
@@ -14,18 +14,18 @@ Nói một cách đơn giản, các giá trị "có thể tiếp cận" là nh
Ví dụ:
- - Hàm hiện đang thực thi, các biến cục bộ và tham số của nó.
+ - Hàm hiện đang chạy, các biến cục bộ và tham số của nó.
- Các hàm khác trên chuỗi lệnh gọi lồng nhau hiện tại, các biến cục bộ và tham số của chúng.
- - Biến toàn cục.
- - (có một số khác, nội bộ là tốt)
+ - Biến chung.
+ - (có một số khác, cũng có nội bộ)
Những giá trị này được gọi là *gốc*.
2. Bất kỳ giá trị nào khác được coi là có thể truy cập được nếu giá trị đó có thể truy cập được từ gốc bằng tham chiếu hoặc chuỗi tham chiếu.
- Chẳng hạn, nếu có một đối tượng trong một biến toàn cục và đối tượng đó có một thuộc tính tham chiếu đến một đối tượng khác, thì đối tượng *that* đó được coi là có thể truy cập được. Và những thứ mà nó tham chiếu cũng có thể truy cập được. Ví dụ chi tiết để làm theo.
+ Chẳng hạn, nếu có một đối tượng trong một biến chung và đối tượng đó có một thuộc tính tham chiếu đến một đối tượng khác, thì đối tượng *đó* đó được coi là có thể truy cập được. Và những thứ mà nó tham chiếu cũng có thể truy cập được. Ví dụ chi tiết để làm theo.
-Có một quy trình nền trong JavaScript engine được gọi là [bộ gom rác](https://vi.wikipedia.org/wiki/Thu_gom_r%C3%A1c_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)). Nó giám sát tất cả các đối tượng và loại bỏ những đối tượng không thể truy cập được.
+Có một quy trình nền trong JavaScript engine được gọi là [bộ gom rác](https://vi.wikipedia.org/wiki/Thu_gom_rác_(khoa_học_máy_tính)). Nó giám sát tất cả các đối tượng và loại bỏ những đối tượng không thể truy cập được.
## Một ví dụ đơn giản
@@ -40,7 +40,7 @@ let user = {

-Ở đây mũi tên mô tả một tham chiếu đối tượng. Biến toàn cục `"user"` tham chiếu đối tượng `{name: "John"}` (chúng ta sẽ gọi nó là John cho ngắn gọn). Thuộc tính `"name"` của John lưu trữ một giá trị nguyên thủy, do đó, nó được vẽ bên trong đối tượng.
+Ở đây mũi tên mô tả một tham chiếu đối tượng. Biến chung `"user"` tham chiếu đối tượng `{name: "John"}` (chúng ta sẽ gọi nó là John cho ngắn gọn). Thuộc tính `"name"` của John lưu trữ một nguyên hàm, do đó, nó được vẽ bên trong đối tượng.
Nếu giá trị của `user` bị ghi đè, tham chiếu sẽ bị mất:
@@ -74,11 +74,11 @@ Bây giờ nếu chúng ta làm như vậy:
user = null;
```
-...Sau đó, đối tượng vẫn có thể truy cập được thông qua biến toàn cầu `admin`, do đó, đối tượng nằm trong bộ nhớ. Nếu chúng ta ghi đè lên `admin`, thì nó có thể bị xóa.
+...Sau đó, đối tượng vẫn có thể truy cập được thông qua biến chung `admin`, do đó, đối tượng nằm trong bộ nhớ. Nếu chúng ta ghi đè lên `admin`, thì nó có thể bị xóa.
## Các đối tượng liên kết với nhau
-Bây giờ là một ví dụ phức tạp hơn. Một gia đình:
+Bây giờ là một ví dụ phức tạp hơn. Gia đình:
```js
function marry(man, woman) {
@@ -145,7 +145,7 @@ Ví dụ này cho thấy tầm quan trọng của khái niệm khả năng tiế
Rõ ràng là John và Ann vẫn được liên kết với nhau, cả hai đều có tham chiếu sắp tới. Nhưng điều đó là không đủ.
-Đối tượng `"gia đình"` trước đây đã bị hủy liên kết khỏi thư mục gốc, không còn tham chiếu đến nó nữa, vì vậy toàn bộ đối tượng trở nên không thể truy cập được và sẽ bị xóa.
+Đối tượng `"family"` trước đây đã bị hủy liên kết khỏi thư mục gốc, không còn tham chiếu đến nó nữa, vì vậy toàn bộ đối tượng trở nên không thể truy cập được và sẽ bị xóa.
## Thuật toán nội bộ
@@ -169,11 +169,11 @@ Bước đầu tiên đánh dấu gốc:

-Sau đó, tham chiếu của họ được đánh dấu:
+Sau đó, tham chiếu của chúng được đánh dấu:

-...Và tham chiếu của họ, trong khi có thể:
+...Và tham chiếu của chúng, trong khi có thể:

@@ -187,11 +187,11 @@ Chúng ta cũng có thể tưởng tượng quá trình này giống như đổ
Một số tối ưu hóa:
-- **Thu gom thế hệ** -- các đối tượng được chia thành hai bộ: "bộ mới" và "bộ cũ". Nhiều đối tượng xuất hiện, thực hiện công việc của chúng và chết nhanh chóng, chúng có thể được dọn dẹp một cách tích cực. Những người tồn tại đủ lâu, trở nên "già" và ít được kiểm tra thường xuyên hơn.
-- **Tập hợp gia tăng** -- nếu có nhiều đối tượng và chúng ta cố gắng đi bộ và đánh dấu toàn bộ tập hợp đối tượng cùng một lúc, có thể mất một chút thời gian và gây ra sự chậm trễ có thể nhìn thấy được trong quá trình thực thi. Vì vậy, engine cố gắng chia bộ sưu tập rác thành nhiều phần. Sau đó, các mảnh được thực hiện từng cái một, riêng biệt. Điều đó đòi hỏi một số kế toán bổ sung giữa chúng để theo dõi các thay đổi, nhưng chúng ta có nhiều sự chậm trễ nhỏ thay vì một sự chậm trễ lớn.
+- **Thu gom thế hệ** -- các đối tượng được chia thành hai bộ: "bộ mới" và "bộ cũ". Nhiều đối tượng xuất hiện, thực hiện công việc của chúng và chết nhanh chóng, chúng có thể được dọn dẹp một cách tích cực. Những đối tượng tồn tại đủ lâu, trở nên "già" và ít được kiểm tra thường xuyên hơn.
+- **Thu gom gia tăng** -- nếu có nhiều đối tượng và chúng ta cố gắng đi bộ và đánh dấu toàn bộ tập hợp đối tượng cùng một lúc, có thể mất một chút thời gian và gây ra sự chậm trễ có thể nhìn thấy được trong quá trình thực thi. Vì vậy, engine cố gắng chia bộ thu gom rác thành nhiều phần. Sau đó, các mảnh được thực hiện từng cái một, riêng biệt. Điều đó đòi hỏi một số kế toán bổ sung giữa chúng để theo dõi các thay đổi, nhưng chúng ta có nhiều sự chậm trễ nhỏ thay vì một sự chậm trễ lớn.
- **Thu gom vào thời gian nhàn rỗi** -- bộ thu gom rác cố gắng chỉ chạy khi CPU không hoạt động, để giảm tác động có thể có đối với quá trình thực thi.
-Có tồn tại các tối ưu hóa và hương vị khác của thuật toán thu gom rác. Tôi muốn mô tả chúng ở đây nhiều như thế nào nhưng tôi phải dừng lại, bởi vì các công cụ khác nhau thực hiện các chỉnh sửa và kỹ thuật khác nhau. Và, điều quan trọng hơn nữa, mọi thứ thay đổi khi engine phát triển, vì vậy việc nghiên cứu sâu hơn "trước", nếu không có nhu cầu thực sự có lẽ không đáng. Tất nhiên, trừ khi đó là vấn đề hoàn toàn vì lợi ích, khi đó sẽ có một số liên kết dành cho bạn bên dưới.
+Có tồn tại các tối ưu hóa và hương vị khác của thuật toán thu gom rác. Tôi muốn mô tả thêm nhiều nữa nhưng tôi phải dừng lại, bởi vì các engine khác nhau thực hiện các chỉnh sửa và kỹ thuật khác nhau. Và, điều quan trọng hơn nữa, mọi thứ thay đổi khi engine phát triển, vì vậy việc nghiên cứu sâu hơn "trước", nếu không có nhu cầu thực sự có lẽ không đáng. Tất nhiên, trừ khi đó là vấn đề hoàn toàn vì lợi ích, khi đó sẽ có một số liên kết dành cho bạn bên dưới.
## Tóm tắt
From ea17a7e7be573c0501678ba9558458ac1fb86ad8 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:28:17 +0700
Subject: [PATCH 37/47] Update family-delete-refs.svg
---
.../03-garbage-collection/family-delete-refs.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
index 6edd16079..6754a3922 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-delete-refs.svg
@@ -1 +1 @@
-
+
From 0e5e43c3fa3d3e8354ee404a5f5b187099708008 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:29:40 +0700
Subject: [PATCH 38/47] Update family-no-family.svg
---
.../04-object-basics/03-garbage-collection/family-no-family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
index f2ea98006..daa43f415 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-family.svg
@@ -1 +1 @@
-
+
From 7cf96aea3a1888d829751030637295573d3111c9 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:29:58 +0700
Subject: [PATCH 39/47] Update family-no-father-2.svg
---
.../03-garbage-collection/family-no-father-2.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
index 98e4419b3..fe69d7eef 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father-2.svg
@@ -1 +1 @@
-
+
From de84c8b98eb02a6411b6e250cb8bc5b0f54c84cf Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:30:31 +0700
Subject: [PATCH 40/47] Update family-no-father.svg
---
.../04-object-basics/03-garbage-collection/family-no-father.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
index 8344dc2db..5b7e7fb1b 100644
--- a/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family-no-father.svg
@@ -1 +1 @@
-
+
From 8c82dd733f8fd268b7804c66dd54ca78d2e64da5 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:35:04 +0700
Subject: [PATCH 41/47] Update family.svg
---
1-js/04-object-basics/03-garbage-collection/family.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/family.svg b/1-js/04-object-basics/03-garbage-collection/family.svg
index faf8ca60d..cc99443a1 100644
--- a/1-js/04-object-basics/03-garbage-collection/family.svg
+++ b/1-js/04-object-basics/03-garbage-collection/family.svg
@@ -1 +1 @@
-
+
From 1d1d6f371a3d8b5d7ee3f260c78be4966fe0f2d3 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:35:47 +0700
Subject: [PATCH 42/47] Update garbage-collection-5.svg
---
.../03-garbage-collection/garbage-collection-5.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg b/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg
index 2d85432bc..24cbd0b2e 100644
--- a/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg
+++ b/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
From 228d0035df06466b320b28a02e7dce3195dd6ae7 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:36:04 +0700
Subject: [PATCH 43/47] Update garbage-collection-5.svg
---
.../03-garbage-collection/garbage-collection-5.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg b/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg
index 24cbd0b2e..73870fdf7 100644
--- a/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg
+++ b/1-js/04-object-basics/03-garbage-collection/garbage-collection-5.svg
@@ -1 +1 @@
-
+
From 84b38aa81c40eccd13aa8c33a64f18f1882311fb Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:36:16 +0700
Subject: [PATCH 44/47] Update memory-user-john-admin.svg
---
.../03-garbage-collection/memory-user-john-admin.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
index 4bd1dd813..c9db702cf 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john-admin.svg
@@ -1 +1 @@
-
+
From bfeade0b5609b56b759aa305ee771dc176851265 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:36:35 +0700
Subject: [PATCH 45/47] Update memory-user-john-lost.svg
---
.../03-garbage-collection/memory-user-john-lost.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
index 6850a0824..9702861cd 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john-lost.svg
@@ -1 +1 @@
-
+
From 3f44499ac687e00cd1d04f6a00b69abd3a201e26 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:36:51 +0700
Subject: [PATCH 46/47] Update memory-user-john.svg
---
.../04-object-basics/03-garbage-collection/memory-user-john.svg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg b/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg
index cef3dc563..17a600376 100644
--- a/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg
+++ b/1-js/04-object-basics/03-garbage-collection/memory-user-john.svg
@@ -1 +1 @@
-
+
From 727590811c14cdc1c0a0bb9edf139d722d2318a4 Mon Sep 17 00:00:00 2001
From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com>
Date: Wed, 7 Jun 2023 23:15:33 +0700
Subject: [PATCH 47/47] Sync with en version
---
.../03-garbage-collection/article.md | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/1-js/04-object-basics/03-garbage-collection/article.md b/1-js/04-object-basics/03-garbage-collection/article.md
index 9d9cc30e5..047ab582f 100644
--- a/1-js/04-object-basics/03-garbage-collection/article.md
+++ b/1-js/04-object-basics/03-garbage-collection/article.md
@@ -74,7 +74,7 @@ Bây giờ nếu chúng ta làm như vậy:
user = null;
```
-...Sau đó, đối tượng vẫn có thể truy cập được thông qua biến chung `admin`, do đó, đối tượng nằm trong bộ nhớ. Nếu chúng ta ghi đè lên `admin`, thì nó có thể bị xóa.
+...Sau đó, đối tượng vẫn có thể truy cập được thông qua biến chung `admin`, vì vậy nó phải ở trong bộ nhớ. Nếu chúng ta ghi đè lên `admin`, thì nó có thể bị xóa.
## Các đối tượng liên kết với nhau
@@ -169,11 +169,11 @@ Bước đầu tiên đánh dấu gốc:

-Sau đó, tham chiếu của chúng được đánh dấu:
+Sau đó, chúng ta theo dõi các tham chiếu của chúng và đánh dấu các đối tượng được tham chiếu:

-...Và tham chiếu của chúng, trong khi có thể:
+...Và tiếp tục đi theo các tham chiếu khác, nếu có thể:

@@ -183,12 +183,12 @@ Bây giờ các đối tượng không thể truy cập được trong quy trìn
Chúng ta cũng có thể tưởng tượng quá trình này giống như đổ một thùng sơn khổng lồ từ gốc, chảy qua tất cả các tham chiếu và đánh dấu tất cả các đối tượng có thể tiếp cận. Những cái không được đánh dấu sau đó được loại bỏ.
-Đó là khái niệm về cách hoạt động của thu gom rác. Các JavaScript engine áp dụng nhiều tối ưu hóa để làm cho nó chạy nhanh hơn và không ảnh hưởng đến việc thực thi.
+Đó là khái niệm về cách hoạt động của thu gom rác. Các JavaScript engine áp dụng nhiều tối ưu hóa để làm cho nó chạy nhanh hơn và không gây ra bất kỳ sự chậm trễ nào trong quá trình thực thi mã.
Một số tối ưu hóa:
-- **Thu gom thế hệ** -- các đối tượng được chia thành hai bộ: "bộ mới" và "bộ cũ". Nhiều đối tượng xuất hiện, thực hiện công việc của chúng và chết nhanh chóng, chúng có thể được dọn dẹp một cách tích cực. Những đối tượng tồn tại đủ lâu, trở nên "già" và ít được kiểm tra thường xuyên hơn.
-- **Thu gom gia tăng** -- nếu có nhiều đối tượng và chúng ta cố gắng đi bộ và đánh dấu toàn bộ tập hợp đối tượng cùng một lúc, có thể mất một chút thời gian và gây ra sự chậm trễ có thể nhìn thấy được trong quá trình thực thi. Vì vậy, engine cố gắng chia bộ thu gom rác thành nhiều phần. Sau đó, các mảnh được thực hiện từng cái một, riêng biệt. Điều đó đòi hỏi một số kế toán bổ sung giữa chúng để theo dõi các thay đổi, nhưng chúng ta có nhiều sự chậm trễ nhỏ thay vì một sự chậm trễ lớn.
+- **Thu gom thế hệ** -- các đối tượng được chia thành hai bộ: "bộ mới" và "bộ cũ". Trong mã điển hình, nhiều đối tượng có tuổi thọ ngắn: chúng xuất hiện, thực hiện công việc của mình và chết nhanh chóng, vì vậy, việc theo dõi các đối tượng mới và xóa bộ nhớ khỏi chúng là điều hợp lý nếu đúng như vậy. Những đối tượng tồn tại đủ lâu, trở nên "già" và ít được kiểm tra thường xuyên hơn.
+- **Thu gom gia tăng** -- nếu có nhiều đối tượng và chúng ta cố gắng đi bộ và đánh dấu toàn bộ đối tượng cùng một lúc, có thể mất một chút thời gian và gây ra sự chậm trễ có thể nhìn thấy trong quá trình thực thi. Vì vậy, engine chia toàn bộ tập hợp các đối tượng hiện có thành nhiều phần. Và sau đó lần lượt xóa các phần này. Có nhiều bộ thu gom rác nhỏ thay vì một bộ lớn. Điều đó đòi hỏi một số kế toán bổ sung giữa chúng để theo dõi các thay đổi, nhưng chúng tôi nhận được nhiều sự chậm trễ nhỏ thay vì một sự chậm trễ lớn.
- **Thu gom vào thời gian nhàn rỗi** -- bộ thu gom rác cố gắng chỉ chạy khi CPU không hoạt động, để giảm tác động có thể có đối với quá trình thực thi.
Có tồn tại các tối ưu hóa và hương vị khác của thuật toán thu gom rác. Tôi muốn mô tả thêm nhiều nữa nhưng tôi phải dừng lại, bởi vì các engine khác nhau thực hiện các chỉnh sửa và kỹ thuật khác nhau. Và, điều quan trọng hơn nữa, mọi thứ thay đổi khi engine phát triển, vì vậy việc nghiên cứu sâu hơn "trước", nếu không có nhu cầu thực sự có lẽ không đáng. Tất nhiên, trừ khi đó là vấn đề hoàn toàn vì lợi ích, khi đó sẽ có một số liên kết dành cho bạn bên dưới.
@@ -199,14 +199,14 @@ Những điều chính cần biết:
- Việc thu gom rác được thực hiện tự động. Chúng ta không thể ép buộc hay ngăn cản.
- Các đối tượng được giữ lại trong bộ nhớ trong khi chúng có thể truy cập được.
-- Được tham chiếu không giống như có thể truy cập được (từ gốc): một gói các đối tượng được liên kết với nhau có thể trở nên không thể truy cập được như một tổng thể.
+- Được tham chiếu không giống như có thể truy cập được (từ gốc): một gói các đối tượng được liên kết với nhau có thể trở nên không thể truy cập được như một tổng thể, như chúng ta đã thấy trong ví dụ trên.
Các engine hiện đại thực hiện các thuật toán thu gom rác tiên tiến.
Một cuốn sách chung "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) đề cập đến một số trong số chúng.
-Nếu bạn đã quen với lập trình cấp thấp, thông tin chi tiết hơn về trình thu gom rác V8 có trong bài viết [Chuyến tham quan V8: Thu gom rác](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
+Nếu bạn đã quen với lập trình cấp thấp, thông tin chi tiết hơn về bộ thu gom rác của V8 có trong bài viết [Chuyến tham quan V8: Thu gom rác](https://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
-[Blog V8](https://v8.dev/) thỉnh thoảng cũng xuất bản các bài viết về những thay đổi trong quản lý bộ nhớ. Đương nhiên, để tìm hiểu về thu gom rác, tốt hơn hết bạn nên chuẩn bị bằng cách tìm hiểu về các bộ phận bên trong engine V8 nói chung và đọc blog của [Vyacheslav Egorov](http://mrale.ph), người từng là một trong những kỹ sư của engine V8. Tôi đang nói: "V8", bởi vì nó được đề cập tốt nhất với các bài báo trên internet. Đối với các công cụ khác, nhiều cách tiếp cận tương tự nhau, nhưng việc thu gom rác khác nhau ở nhiều khía cạnh.
+[Blog V8](https://v8.dev/) thỉnh thoảng cũng xuất bản các bài viết về những thay đổi trong quản lý bộ nhớ. Đương nhiên, để tìm hiểu thêm về thu gom rác, tốt hơn hết bạn nên chuẩn bị bằng cách tìm hiểu về các bộ phận bên trong engine V8 nói chung và đọc blog của [Vyacheslav Egorov](https://mrale.ph), người từng là một trong những kỹ sư của engine V8. Tôi đang nói: "V8", bởi vì nó được đề cập tốt nhất bởi các bài báo trên internet. Đối với các công cụ khác, nhiều cách tiếp cận tương tự nhau, nhưng việc thu gom rác khác nhau ở nhiều khía cạnh.
Kiến thức chuyên sâu về các công cụ rất hữu ích khi bạn cần tối ưu hóa ở mức độ thấp. Sẽ là khôn ngoan nếu bạn lên kế hoạch cho bước tiếp theo sau khi bạn đã quen thuộc với ngôn ngữ này.