Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Garbage collection #33

Open
wants to merge 39 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
1d11cfa
Die Müllsammlung (garbage collection)
u-n-known Apr 19, 2020
9bf8aa0
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
3d62d40
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
d1b3879
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
a641659
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
0b4ab9a
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
5e5215f
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
1d5c8af
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
5327064
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
acf25ba
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
dd11120
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
71debe4
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
6ca271b
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
fb38ff8
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
ed6f1d7
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
3408853
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
09d5781
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
35ef8a2
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
fc38cd5
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
ab350f1
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
d5e9d46
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
47f1485
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
e1a3db2
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
a6d82b9
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
3430779
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
8e0b737
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
7e2ff31
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
2d53fc7
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
cbef3a3
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
d9834d9
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
d9ed4e0
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
fa3e991
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
830ccdd
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
753e9b5
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
76cbff8
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
3ac6ecf
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
a52d6df
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
f1d06bf
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
b01e70c
Update 1-js/04-object-basics/02-garbage-collection/article.md
u-n-known Apr 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 75 additions & 74 deletions 1-js/04-object-basics/02-garbage-collection/article.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,64 @@
# Garbage collection
# Müllsammlung
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Müllsammlung
# Garbage Collection

Naja, bei manchen Wörtern macht eine direkte Übersetzung einfach keinen Sinn - das is aber auch nicht weiter schlimm. In der Readme steht, dass für ausgefallene Wörte, für die es keine direkte Übersetzung gibt, gerne das englisch Original verwendet werden kann. Wenn du es dennoch übersetzen willst, dann würde ich es abstrakter übersetzen, z.B. Speicherbereinigung

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Müllsammlung fand ich ehrlich gesagt einfach nur ulkig und mir war schon ziemlich klar, dass das so nicht sehen bleiben kann. Speicherbereinigung hört sich relativ gut an, entscheiden werde ich mich aber erst später.


Memory management in JavaScript is performed automatically and invisibly to us. We create primitives, objects, functions... All that takes memory.
Die Speicherverwaltung in JavaScript wird automatisch, für uns unsichtbar, durchgeführt. Wir erstellen einfache Datenstrukturen, Objekte, Funktionen... All das braucht Speicher.
All das nimmt Speicher in Anspruch.
u-n-known marked this conversation as resolved.
Show resolved Hide resolved

What happens when something is not needed any more? How does the JavaScript engine discover it and clean it up?
Was passiert, wenn etwas nicht mehr gebraucht wird? Wie erkennt das die JavaScript-Engine und bereinigt es?

## Reachability
## Erreichbarkeit

The main concept of memory management in JavaScript is *reachability*.
Das zentrale Konzept der Speicherverwaltung in JavaScript ist *Erreichbarkeit*.

Simply put, "reachable" values are those that are accessible or usable somehow. They are guaranteed to be stored in memory.
Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugänglich oder nutzbar sind. Sie werden garantiert im Speicher abgelegt.

1. There's a base set of inherently reachable values, that cannot be deleted for obvious reasons.
1. Es gibt einen Basissatz von inhärent erreichbaren Werten, die aus offensichtlichen Gründen nicht gelöscht werden können.

For instance:
Zum Beispiel:

- Local variables and parameters of the current function.
- Variables and parameters for other functions on the current chain of nested calls.
- Global variables.
- (there are some other, internal ones as well)
- Lokale Variablen und Parameter der aktuellen Funktion.
- Variablen und Parameter für andere Funktionen in der aktuellen Kette von verschachtelten Aufrufen.
- Globale Variablen.
- (es gibt weitere, auch interne)

These values are called *roots*.
Diese Werte werden *Wurzeln* genannt.

2. Any other value is considered reachable if it's reachable from a root by a reference or by a chain of references.
2. Jeder andere Wert gilt als erreichbar, wenn er von einer Wurzel aus durch eine Referenz oder durch eine Kette von Referenzen erreichbar ist.

For instance, if there's an object in a local 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.
Wenn sich beispielsweise ein Objekt in einer lokalen Variable befindet und dieses Objekt eine Eigenschaft hat, die auf ein anderes Objekt verweist, gilt dieses Objekt als erreichbar. Und diejenigen, die es referenziert, sind ebenfalls erreichbar. Ausführliche Beispiele folgen.

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.
Es gibt einen Hintergrundprozess in der JavaScript-Engine, der [Garbage Collector](https://de.wikipedia.org/wiki/Garbage_Collection) genannt wird. Dieser überwacht alle Objekte und entfernt diejenigen, die unerreichbar geworden sind.

## A simple example
## Ein einfaches Beispiel

Here's the simplest example:
Hier ist das einfachste Beispiel:

```js
// user has a reference to the object
// user hat eine Referenz auf das Objekt
let user = {
name: "John"
};
```

![](memory-user-john.svg)

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.
Hier zeigt der Pfeil eine Referenz eines Objekt. Die globale Variabel `"user"` referenziert das Objekt `{name: "John"}` (wir nennen es John, der Kürze halber). Die Property `"name"` von John speichert ein Primitive, weshalb es innerhalb des Objekt steht.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Hier zeigt der Pfeil eine Referenz eines Objekt. Die globale Variabel `"user"` referenziert das Objekt `{name: "John"}` (wir nennen es John, der Kürze halber). Die Property `"name"` von John speichert ein Primitive, weshalb es innerhalb des Objekt steht.
Hier stellt der Pfeil eine Objektreferenz dar. Die globale Variable `"user"` referenziert das Objekt `{name: "John"}` (der Kürze halber nennen wir es John). Die Eigenschaft `"name"` von John speichert ein Primitiv, daher ist es innerhalb des Objekts abgebildet.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sprechen wir im Deutschen von einem Primitiv oder Skalar?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@christianhegedues hier zum Beispiel. Habe bei mehreren Verbesserungen kleinere Fragen, die aber nur im Files changed Panel, und nicht im Conversation Panel, zu sehen sind. Ich meinte du würdest eine direkte Benachrichtigung bekommen, wenn ich ein Kommentar unter eine der Verbesserungen setze, ohne dich direkt, @christianhegedues, nennen zu müssen.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@u-n-known laut MDN sind es Primitive. Würde mich dann auch daran etwas orientieren.


If the value of `user` is overwritten, the reference is lost:
Wenn der Wert von `user` überschrieben wird, geht die Referenz verloren:

```js
user = null;
```

![](memory-user-john-lost.svg)

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.
Nun ist John unerreichbar. Es gibt keinen Weg auf ihn zuzugreifen, keine Referenz zu ihm. Die Müllsammlung verwirft die Daten und reinigt den Speicher.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Nun ist John unerreichbar. Es gibt keinen Weg auf ihn zuzugreifen, keine Referenz zu ihm. Die Müllsammlung verwirft die Daten und reinigt den Speicher.
Jetzt wird John unerreichbar. Es gibt keine Möglichkeit mehr, darauf zuzugreifen - nichts referenziert darauf. Der Garbage Collector wird die Daten verwerfen und den Speicher freigeben.

Wie schon angesprochen, Garbage Collector oder Speicherbereinigung.
Zudem, "will junk" (will-future) -> wird verwerfen


## Two references
## Zwei Referenzen

Now let's imagine we copied the reference from `user` to `admin`:
Nun stellen wir uns vor, wir kopieren den Verweis von `user` auf `admin`:

```js
// user has a reference to the object
// user hat eine Referenz zum Objekt
let user = {
name: "John"
};
Expand All @@ -69,16 +70,16 @@ let admin = user;

![](memory-user-john-admin.svg)

Now if we do the same:
Wenn wir jetzt dasselbe tun:
```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.
...dann ist das Objekt immer noch über die globale Variable `admin` erreichbar, es befindet sich also im Speicher. Wenn wir auch `admin` überschreiben, dann kann es entfernt werden.

## Interlinked objects

Now a more complex example. The family:
Jetzt ein komplexeres Beispiel. Die Familie:

```js
function marry(man, woman) {
Expand All @@ -98,15 +99,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.
Die Funktion `marry` "verheiratet" zwei Objekte, in dem sie ihnen Referenzen zum jeweils anderen gibt und ein Objekt ausgibt, dass beide beinhaltet.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Die Funktion `marry` "verheiratet" zwei Objekte, in dem sie ihnen Referenzen zum jeweils anderen gibt und ein Objekt ausgibt, dass beide beinhaltet.
Die Funktion `marry` "verheiratet" zwei Objekte, indem sie diese miteinander referenziert und ein neues Objekt erzeugt, das beide enthält.


The resulting memory structure:
Die resultierende Speicherstruktur:

![](family.svg)

As of now, all objects are reachable.
Ab sofort sind alle Objekte erreichbar.

Now let's remove two references:
Nun wollen wir zwei Referenzen entfernen:

```js
delete family.father;
Expand All @@ -115,98 +116,98 @@ delete family.mother.husband;

![](family-delete-refs.svg)

It's not enough to delete only one of these two references, because all objects would still be reachable.
Es reicht nicht aus, nur einen dieser beiden Verweise zu löschen, denn dann wären alle Objekte noch erreichbar.

But if we delete both, then we can see that John has no incoming reference any more:
Aber wenn wir beide löschen, dann können wir sehen, dass John keine eingehende Referenz mehr hat:

![](family-no-father.svg)

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.
Ausgehende Referenzen spielen keine Rolle. Nur eingehende Referenzen können ein Objekt erreichbar machen. Nun ist John unerreichbar und wird mit all seinen ebenfalls unerreichbar gewordenen Daten aus dem Speicher entfernt.

After garbage collection:
Nach der Müllsammlung:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Nach der Müllsammlung:
Nach der Garbage Collection:


![](family-no-father-2.svg)

## Unreachable island
## Unerreichbare Insel
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Unerreichbare Insel
## Unerreichbare Gruppen

In diesem Kontext wohl eher Gruppen


It is possible that the whole island of interlinked objects becomes unreachable and is removed from the memory.
Es ist möglich, dass die ganze Insel mit den miteinander verbundenen Objekten unerreichbar wird und sie vom Speicher entfernt wird.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Es ist möglich, dass die ganze Insel mit den miteinander verbundenen Objekten unerreichbar wird und sie vom Speicher entfernt wird.
Es ist möglich, dass eine ganze Gruppe miteinander verbundenen Objekte unerreichbar wird und aus dem Speicher verschwindet.

wird wird...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wird wird...

Autsch!

Suggested change
Es ist möglich, dass die ganze Insel mit den miteinander verbundenen Objekten unerreichbar wird und sie vom Speicher entfernt wird.
Es ist möglich, dass eine ganze Gruppe aus miteinander verbundenen Objekte unerreichbar wird und aus dem Speicher verschwindet.


The source object is the same as above. Then:
Das Ursprungsobjekt ist das selbe wie oben. Denn:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Das Ursprungsobjekt ist das selbe wie oben. Denn:
Das Ausgangsobjekt ist dasselbe wie oben. Dann:


```js
family = null;
```

The in-memory picture becomes:
Das Speicherabbild wird zu:

![](family-no-family.svg)

This example demonstrates how important the concept of reachability is.
Diese Beispiel demonstriert, wie wichtig das Konzept der Erreichbarkeit ist.

It's obvious that John and Ann are still linked, both have incoming references. But that's not enough.
Es ist offensichtlich, dass John und Ann noch miteinander verbunden sind, beide haben eingehende Referenzen. Aber das reicht nicht aus.

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.
Das frühere `"family"`-Objekt wurde von der Wurzel losgelöst, es gibt keinen Verweis mehr darauf, so dass die ganze Gruppe unerreichbar wird und entfernt werden muss.

## Internal algorithms
## Interne Algorithmen

The basic garbage collection algorithm is called "mark-and-sweep".
Die grundlegende Müllsammlung nennt sich "mark-and-sweep".
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Die grundlegende Müllsammlung nennt sich "mark-and-sweep".
Der grundlegende Garbage-Collection-Algorithmus heißt "mark-and-sweep".


The following "garbage collection" steps are regularly performed:
Die folgenden Schritte der "Müllsammlung" werden regulär ausgeführt:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Die folgenden Schritte der "Müllsammlung" werden regulär ausgeführt:
Die folgenden "Garbage Collection"-Schritte werden regelmäßig durchgeführt:


- 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.
- Die Müllsammlung nimmt sich die Wurzeln und "markiert" (erinnert sich an) diese.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Die Müllsammlung nimmt sich die Wurzeln und "markiert" (erinnert sich an) diese.
- Der Garbage Collector nimmt sich die Wurzeln und "markiert" (erinnert sich an) diese.

- Dann besucht sie diese und "markiert" alle von ihnen ausgehenden Referenzen.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Dann besucht sie diese und "markiert" alle von ihnen ausgehenden Referenzen.
- Dann besucht und "markiert" er alle Referenzen, die von diesen ausgehen.

- Dann besucht sie die markierten Objekte und markiert *deren* Referenzen. Alle besuchten Objekte werden vermerkt, sodass das selbe Objekt später nicht erneut besucht werden muss.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Dann besucht sie die markierten Objekte und markiert *deren* Referenzen. Alle besuchten Objekte werden vermerkt, sodass das selbe Objekt später nicht erneut besucht werden muss.
- Dann besucht er markierte Objekte und kennzeichnet *ihre* Referenzen. Alle besuchten Objekte werden registriert, um in Zukunft nicht das gleiche Objekt zweimal zu besuchen.

- ...Und so weiter, bis alle erreichbaren Referenzen (ab der Wurzel) besucht sind.
- Alle Objekte außer die markierten werden entfernt.

For instance, let our object structure look like this:
Gehen wir, beispielsweise, von folgender Objektstruktur aus:

![](garbage-collection-1.svg)

We can clearly see an "unreachable island" to the right side. Now let's see how "mark-and-sweep" garbage collector deals with it.
Wir können klar eine "unerreichbare Insel" auf der rechten Seite erkennen. Wir sehen uns nun an wie die "mark-and-sweep" Müllsammlung damit umgeht.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Wir können klar eine "unerreichbare Insel" auf der rechten Seite erkennen. Wir sehen uns nun an wie die "mark-and-sweep" Müllsammlung damit umgeht.
Wir sehen deutlich eine "unerreichbare Gruppe" auf der rechten Seite. Schauen wir uns nun an, wie der Garbage Collector mit "mark-and-sweep" umgeht.


The first step marks the roots:
Beim ersten Schritt werden die Wurzeln markiert:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Beim ersten Schritt werden die Wurzeln markiert:
Der erste Schritt markiert die Wurzeln:


![](garbage-collection-2.svg)

Then their references are marked:
Dann werden ihre Referenzen markiert:

![](garbage-collection-3.svg)

...And their references, while possible:
...und ihre Referenzen, sofern möglich:

![](garbage-collection-4.svg)

Now the objects that could not be visited in the process are considered unreachable and will be removed:
Die Objekte, die dabei nicht erreicht werden konnten, werden jetzt als unerreichbar eingestuft und entfernt:

![](garbage-collection-5.svg)

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.
Wir können uns den Prozess auch als riesigen Farbeimer vorstellen, der bei den Wurzeln verschüttet wird und durch die Verweise fließt und alle erreichbaren Objekte markiert. Die Unmarkierten werden dann entfernt.

That's the concept of how garbage collection works. JavaScript engines apply many optimizations to make it run faster and not affect the execution.
Das ist das Konzept hinter der Müllsammlung. JavaScript Engines applizieren viele Optimierungen, sodass die Ausführung schneller abläuft und sie nicht behindert.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Das ist das Konzept hinter der Müllsammlung. JavaScript Engines applizieren viele Optimierungen, sodass die Ausführung schneller abläuft und sie nicht behindert.
Das ist das Konzept hinter der Garbage Collection. JavaScript-Engines wenden viele Optimierungen an, damit es schneller läuft und die Ausführung nicht beeinträchtigt wird.


Some of the optimizations:
Einige der Optimierungen:

- **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.
- **Generationelle Garbage Collection** -- Objekte werden in zwei Gruppen aufgeteilt: "Neue" und "Alte". Viele Objekte entstehen, erledigen ihre Arbeit und verschwinden schnell, sie können aggressiv bereinigt werden. Diejenigen, die lange genug bestehen, werden "alt" und seltener geprüft.
- **Schrittweise Garbage Collection** -- wenn es viele Objekte gibt und wir versuchen, über die gesamte Objektmenge auf einmal zu gehen und sie zu markieren, kann das einige Zeit dauern und zu sichtbaren Verzögerungen bei der Programmabwicklung führen. Die Engine versucht, die Garbage Collection in Stücke zu zerlegen. Das erfordert eine zusätzliche Verwaltung, um Änderungen zu verfolgen, aber wir haben viele kleine Verzögerungen statt einer großen.
- **Leerlauf Garbage Collection** -- der Garbage Collector versucht, nur bei Leerlauf der CPU zu laufen, um mögliche Auswirkungen auf die Programmausführung zu reduzieren.

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.
Es existieren andere Optimierungen und Sorten von Algorithmen der Müllsammlung. So gern ich diese hier beschreiben würde, so muss ich mich zurückhalten, da verschiedene Engines verschiedene Kniffe und Techniken mit sich bringen. Und, was noch weit wichtiger ist, Dinge verändern sich wie Engines sich weiterentwickeln, weshalb ein vertieftes Studium "vorab", ohne einen triftigen Grund, es das nicht wert ist. Außer natürlich, wenn es eine Sache reinen Interesses ist. Dann gibt es dafür, unten stehend, ein paar Links.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Es existieren andere Optimierungen und Sorten von Algorithmen der Müllsammlung. So gern ich diese hier beschreiben würde, so muss ich mich zurückhalten, da verschiedene Engines verschiedene Kniffe und Techniken mit sich bringen. Und, was noch weit wichtiger ist, Dinge verändern sich wie Engines sich weiterentwickeln, weshalb ein vertieftes Studium "vorab", ohne einen triftigen Grund, es das nicht wert ist. Außer natürlich, wenn es eine Sache reinen Interesses ist. Dann gibt es dafür, unten stehend, ein paar Links.
Es gibt andere Optimierungen und Varianten von Garbage-Collection-Algorithmen. So gerne ich sie hier beschreiben möchte, ich muss mich zurückhalten, da verschiedene Engines unterschiedliche Optimierungen und Techniken implementieren. Und, was noch wichtiger ist, Dinge ändern sich mit der Weiterentwicklung der Engines, so dass sich ein tieferes "Vorabstudium" ohne eine Notwendigkeit wahrscheinlich nicht lohnt. Es sei denn, du bist interessiert, dann stehen unten einige Links für dich.


## Summary
## Zusammenfassung

The main things to know:
Die wesentlichsten Dinge:

- 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.
- Die Müllsammlung läuft automatisch. Wir können sie nicht zwingen zu laufen oder sie verhindern.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Die Müllsammlung läuft automatisch. Wir können sie nicht zwingen zu laufen oder sie verhindern.
- Die Garbage Collection wird automatisch durchgeführt. Wir können sie weder erzwingen noch verhindern.

- Objekte bleiben im Speicher erhalten, solange sie erreichbar sind.
- Referenziert zu werden ist nicht dasselbe wie (von einer Wurzel aus) erreichbar zu sein: ein Verbund von miteinander verknüpften Objekten kann als Ganzes unerreichbar werden.

Modern engines implement advanced algorithms of garbage collection.
Moderne Engines implementieren fortgeschrittenere Algroithmen der Müllsammlung.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Moderne Engines implementieren fortgeschrittenere Algroithmen der Müllsammlung.
Moderne Engines implementieren fortschrittliche Algorithmen der Garbage Collection.


A general book "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) covers some of them.
Ein allgemeines Buch "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al.) behandelt einige von ihnen.

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).
Wenn du vertraut bist mit low-level programming, dann findest du detailierte Informationen über die V8 Müllsammlung in dem Artikel [A tour of V8: Garbage Collection](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Wenn du vertraut bist mit low-level programming, dann findest du detailierte Informationen über die V8 Müllsammlung in dem Artikel [A tour of V8: Garbage Collection](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
Wenn du mit Low-Level-Programmierung vertraut bist, findest du die ausführlicheren Informationen über V8 Garbage Collector im Artikel [A tour of V8: Garbage Collection](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.
Der [V8 blog](https://v8.dev/) publiziert ab und zu auch Artikel über Änderungen im Speichermanagment. Für gewöhnlich ist es bessr über die internen Prozesse von V8 zu lesen um über Müllsammlung etwas zu erlenen. Der Blog von [Vyacheslav Egorov](http://mrale.ph) bietet sich an, da er bei V8 einer der Ingenieure war. Ich spreche von "V8", weil diese am meisten in Artikeln im Internet behanelt wird. Bei anderen Engines sind die Angehensweisen ähnlich, aber die Müllsammlung unterscheidet sich in vielen Aspekten.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Der [V8 blog](https://v8.dev/) publiziert ab und zu auch Artikel über Änderungen im Speichermanagment. Für gewöhnlich ist es bessr über die internen Prozesse von V8 zu lesen um über Müllsammlung etwas zu erlenen. Der Blog von [Vyacheslav Egorov](http://mrale.ph) bietet sich an, da er bei V8 einer der Ingenieure war. Ich spreche von "V8", weil diese am meisten in Artikeln im Internet behanelt wird. Bei anderen Engines sind die Angehensweisen ähnlich, aber die Müllsammlung unterscheidet sich in vielen Aspekten.
Der [V8 blog](https://v8.dev/) veröffentlicht von Zeit zu Zeit auch Artikel über Änderungen in der Speicherverwaltung. Um die Speicherbereinigung kennenzulernen, solltest du dich im Allgemeinen mehr über V8-Interna informieren und den Blog von [Vyacheslav Egorov](http://mrale.ph) lesen, der als einer der V8-Entwickler arbeitete. Ich sage: "V8", denn es wird am besten durch Artikel im Internet abgedeckt. Bei anderen Engines sind viele Ansätze ähnlich, aber die Garbage Collection unterscheidet sich in vielen Aspekten.

Schwieriger Absatz 🤯

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Der [V8 blog](https://v8.dev/) publiziert ab und zu auch Artikel über Änderungen im Speichermanagment. Für gewöhnlich ist es bessr über die internen Prozesse von V8 zu lesen um über Müllsammlung etwas zu erlenen. Der Blog von [Vyacheslav Egorov](http://mrale.ph) bietet sich an, da er bei V8 einer der Ingenieure war. Ich spreche von "V8", weil diese am meisten in Artikeln im Internet behanelt wird. Bei anderen Engines sind die Angehensweisen ähnlich, aber die Müllsammlung unterscheidet sich in vielen Aspekten.
Der [V8 blog](https://v8.dev/) publiziert ab und zu auch Artikel über Änderungen im Speichermanagment. Für Der [V8 blog](https://v8.dev/) veröffentlicht von Zeit zu Zeit auch Artikel über Änderungen in der Speicherverwaltung. Um die Speicherbereinigung kennenzulernen, solltest du dich im Allgemeinen mehr über V8-Interna informieren und den Blog von [Vyacheslav Egorov](http://mrale.ph) lesen, der als einer der V8-Entwickler arbeitete. Ich sage "V8", denn es wird am besten durch Artikel im Internet abgedeckt. Bei anderen Engines sind viele Ansätze ähnlich, aber die Garbage Collection unterscheidet sich in vielen Aspekten.

Ich habe nur den Doppelpunkt nach Ich sage entfernt, ansonsten wirklich gut gelungene Übersetzung.


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.
In die tiefe gehendes Wissen über Engines ist hilfreich, wenn man low-level Optimisierungen braucht. Es wäre weise, dies als den nexten Schritt einzuplanen, nachdem man mit der Sprache vertraut ist.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In die tiefe gehendes Wissen über Engines ist hilfreich, wenn man low-level Optimisierungen braucht. Es wäre weise, dies als den nexten Schritt einzuplanen, nachdem man mit der Sprache vertraut ist.
Fundierte Kenntnisse über Engines sind gut, wenn du Low-Level-Optimierungen benötigst. Es wäre ratsam, dies als nächsten Schritt zu planen, nachdem du mit der Sprache vertraut bist.