From 1d11cfadfdbc49e480958c3911a55b9d164cb5e3 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Sun, 19 Apr 2020 13:09:08 +0200 Subject: [PATCH 01/39] =?UTF-8?q?Die=20M=C3=BCllsammlung=20(garbage=20coll?= =?UTF-8?q?ection)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ob Müllsammlung oder Garbage Collection, darüber lässt sich streiten. Und wahrscheinlich noch mehr. --- .../02-garbage-collection/article.md | 149 +++++++++--------- 1 file changed, 75 insertions(+), 74 deletions(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 672e26d43..5e24221ae 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -1,38 +1,39 @@ -# Garbage collection +# Müllsammlung -Memory management in JavaScript is performed automatically and invisibly to us. We create primitives, objects, functions... All that takes memory. +Das Speichermanagement wird in JavaScript automatisch und unsichtbar ausgeführt. Wir schaffen Primitives, Objekte, Funktionen... +All das nimmt Speicher in Anspruch. -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 länger gebraucht wird? Wie entdeckt der JavaScript Motor das und räumt es weg? -## Reachability +## Erreichbarkeit -The main concept of memory management in JavaScript is *reachability*. +Das Hauptkonzept des Speichermanagement in JavaScript ist *Erreichbarkeit*. -Simply put, "reachable" values are those that are accessible or usable somehow. They are guaranteed to be stored in memory. +Kurz gefasst: "Erreichbare" Werte sind diese, diejenigen auf die zugegriffen werden kann oder in irgendwie nutzbar sind. Diese werden garantiert im Speicher behalten. -1. There's a base set of inherently reachable values, that cannot be deleted for obvious reasons. +1. Es gibt einen Basissatz mit von Natur aus erreichbare Werte, 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 derzeitigen Funktion. + - Variablen und Parameter für andere Funktionen innerhalb der derzeitigen Kette an eingebetteten Aufrufe. + - 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 wird als erreichbar betrachtet, wenn dieser von einer Wurzel aus durch eine Referenz oder von einer Kette an 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 zum Beispiel es ein Objekt innerhalb einer Variabel gibt und dieses Objekt eine Property besitzt, die zu einem weiteren Objekt referenziert, dann gilt dieses Objekt als erreichbar. Und diejenigen, die es referenzieren sind auch errecihbar. Detaillierte 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 bei der JavaScript Engine, die nennt sich [garbage collector](https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)). Dieser zeichnet alle Objekt auf und entfernd diejenigen, die unerreichbar wurden. -## A simple example +## Ein einzelnes Beispiel -Here's the simplest example: +Hier ist das einfachste Beispiel: ```js -// user has a reference to the object +// user hat eine Referenz zum Objekt let user = { name: "John" }; @@ -40,9 +41,9 @@ let user = { ![](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. -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; @@ -50,14 +51,14 @@ 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. -## Two references +## Zwei Referenzen -Now let's imagine we copied the reference from `user` to `admin`: +Wir nehmen uns nun vor, die Referenz von `user` zu `admin` zu kopieren: ```js -// user has a reference to the object +// user hat eine Referenz zum Objekt let user = { name: "John" }; @@ -69,16 +70,16 @@ let admin = user; ![](memory-user-john-admin.svg) -Now if we do the same: +Wenn wir jetzt das selbe 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 weiterhin erreichbar durch die globale Variabel `admin`, deshalb ist es im Speicher. Wenn wir auch `admin` überschreiben, kann es entfernt werden. ## Interlinked objects -Now a more complex example. The family: +Jetzt ein komplexeres Beispiel. Die Familie: ```js function marry(man, woman) { @@ -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. -The resulting memory structure: +Die resultierende Speicherstruktur: ![](family.svg) -As of now, all objects are reachable. +Bis bier hin sind alle Objekte erreichbar. -Now let's remove two references: +Man entferne nun zwei Referenzen: ```js delete family.father; @@ -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 eine dieser Referenzen zu löschen, da alle Objekte weiterhin erreichbar wären. -But if we delete both, then we can see that John has no incoming reference any more: +Aber wenn wird beide löschen, dann können wir sehen, dass John keine eingehende Referenz mehr verfügt: ![](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 können ein Objekt erreichbar machen. Nun ist John unerreichbar und wird vom Speicher entfernt mit all seinen Daten, auf die auch nicht mehr zugegriffen werden kann. -After garbage collection: +Nach der Müllsammlung: ![](family-no-father-2.svg) -## Unreachable island +## Unerreichbare Insel -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. -The source object is the same as above. Then: +Das Ursprungsobjekt ist das selbe wie oben. Denn: ```js family = null; ``` -The in-memory picture becomes: +Das im Speicher abgelegt Bild wird zu: ![](family-no-family.svg) -This example demonstrates how important the concept of reachability is. +Diese Beispiel demonstriert, wie wichtig das Konzept von Erreichbarkeit ist. -It's obvious that John and Ann are still linked, both have incoming references. But that's not enough. +Es ist offentsichtlic, dass John und Ann weiterhin 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. +Die Verbindung des früheren Objekt `"family"` wurde von der Wurzel gekappt, es gibt keine Referenz mehr zu ihm, deshalb wird die ganze Insel unerreichbar und wird entfernt. -## Internal algorithms +## Interner Algorithmus -The basic garbage collection algorithm is called "mark-and-sweep". +Die grundlegende Müllsammlung nennt sich "mark-and-sweep". -The following "garbage collection" steps are regularly performed: +Die folgenden Schritte der "Müllsammlung" werden regulär ausgefü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. +- Dann besucht sie diese und "markiert" alle von ihnen ausgehenden Referenzen. +- 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. +- ... und so weiter bis jedes jede erreichbare Referenz (von den Wurzel aus) besucht wurde. +- Alle Objekte außer die markierten werden entfernt. -For instance, let our object structure look like this: +Wir nehmen als Beispiel an, dass die Struktur unseres Objekt so aussieht: ![](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. -The first step marks the roots: +Beim ersten Schritt werden die Wurzeln markiert: ![](garbage-collection-2.svg) -Then their references are marked: +Dann werden deren Referenzen markiert: ![](garbage-collection-3.svg) -...And their references, while possible: +... und deren 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: +Nun werden die Objekte, die nicht besucht werden konnten 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 und des Prozess auch als einen Farbeimer vorstellen, der von den Wurzeln ausgehend umgekippt wird und dessen Farbe durch alle Referenzen hindurchfließt und so die 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. -Some of the optimizations: +Ein Paar 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. +- **Generationsgerechte Sammlung** -- Objekte werden in zwei Sorten unterteilt: "die Neuen" und "die Alten". Viele Objekte taufen auch, erledigen ihren Job und verschwinden schnell. Diese können aggressiv bereinigt werden. Diejenigen die lang genug überleben werden "alt" und werden seltener überprüft. +- **Schrittweise Sammlung** -- wenn es eine große Anzahl an Objekten gibt und wir versuchen den ganzen Satz an Objekten abzulaufen und zu markieren, wird dies möglicherweise einige Zeit dauern und sichtbare Verzögerungen in der Ausführung mit sich bringen. Deshalb versucht die Engine die Müllsammlung in Stücke aufzuteilen. Diese Stücke werden dann, separat, eines nach dem anderen ausgeführt. Das verlangt extra Buchführung um die Veränderung zwischen ihnen um Auge zu behalten, jedoch wird man nur wenige kleine Verzögerungen haben, anstatt eine große. +- **Sammlung zur Leerlaufzeit** -- die Müllsammlung versucht nur zu laufen, wenn die CPU inaktiv ist, um den möglichen Effekt auf die Ausführung zu vermindern. -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. -## 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. +- Objekte bleiben im Speicher solange sie erreichbar sind. +- Referenziert zu werden ist nicht das selbe als erreichbar zu sein (von einer Wurzel aus): Ein Haufen an miteinander verbundenn Objekte kann als Ganzes unerreichbar werden. -Modern engines implement advanced algorithms of garbage collection. +Moderne Engines implementieren fortgeschrittenere Algroithmen der Müllsammlung. -A general book "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) covers some of them. +Das Buch "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) geht mehrere von dieses an. -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). -[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. -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. From 9bf8aa0bdc28519a3c39d61e57bcffb03873450d Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:10:03 +0200 Subject: [PATCH 02/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 5e24221ae..255c25326 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -1,6 +1,6 @@ # Müllsammlung -Das Speichermanagement wird in JavaScript automatisch und unsichtbar ausgeführt. Wir schaffen Primitives, Objekte, Funktionen... +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. Was passiert wenn etwas nicht mehr länger gebraucht wird? Wie entdeckt der JavaScript Motor das und räumt es weg? From 3d62d4094fbf9c807f6a8c33bb4f6c0a8574f3fe Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:11:03 +0200 Subject: [PATCH 03/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 255c25326..71bbf890b 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -3,7 +3,7 @@ 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. -Was passiert wenn etwas nicht mehr länger gebraucht wird? Wie entdeckt der JavaScript Motor das und räumt es weg? +Was passiert, wenn etwas nicht mehr gebraucht wird? Wie erkennt das die JavaScript-Engine und bereinigt es? ## Erreichbarkeit From d1b38796348ae4762bfd20778db3e6165c4dcc09 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:11:28 +0200 Subject: [PATCH 04/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 71bbf890b..bad76e9b6 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -7,7 +7,7 @@ Was passiert, wenn etwas nicht mehr gebraucht wird? Wie erkennt das die JavaScri ## Erreichbarkeit -Das Hauptkonzept des Speichermanagement in JavaScript ist *Erreichbarkeit*. +Das zentrale Konzept der Speicherverwaltung in JavaScript ist *Erreichbarkeit*. Kurz gefasst: "Erreichbare" Werte sind diese, diejenigen auf die zugegriffen werden kann oder in irgendwie nutzbar sind. Diese werden garantiert im Speicher behalten. From a641659a9718d73684c9765d71a47558deca7b1f Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:14:58 +0200 Subject: [PATCH 05/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index bad76e9b6..dc6e839c0 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -9,7 +9,7 @@ Was passiert, wenn etwas nicht mehr gebraucht wird? Wie erkennt das die JavaScri Das zentrale Konzept der Speicherverwaltung in JavaScript ist *Erreichbarkeit*. -Kurz gefasst: "Erreichbare" Werte sind diese, diejenigen auf die zugegriffen werden kann oder in irgendwie nutzbar sind. Diese werden garantiert im Speicher behalten. +Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugänglich oder nutzbar sind. Sie werden garantiert im Speicher abgelegt. 1. Es gibt einen Basissatz mit von Natur aus erreichbare Werte, die aus offensichtlichen Gründen nicht gelöscht werden können. From 0b4ab9af15963d9ce06fac7226d8d161336e818b Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:16:57 +0200 Subject: [PATCH 06/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index dc6e839c0..d5f823a9b 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -11,7 +11,7 @@ Das zentrale Konzept der Speicherverwaltung in JavaScript ist *Erreichbarkeit*. Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugänglich oder nutzbar sind. Sie werden garantiert im Speicher abgelegt. -1. Es gibt einen Basissatz mit von Natur aus erreichbare Werte, die aus offensichtlichen Gründen nicht gelöscht werden können. +1. Es gibt einen Basissatz von inhärent erreichbaren Werten, die aus offensichtlichen Gründen nicht gelöscht werden können. Zum Beispiel: From 5e5215fb72d1a972711b6f61f01a320b428a24b0 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:17:14 +0200 Subject: [PATCH 07/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index d5f823a9b..7fb10d82c 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -15,7 +15,7 @@ Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugäng Zum Beispiel: - - Lokale Variablen und Parameter der derzeitigen Funktion. + - Lokale Variablen und Parameter der aktuellen Funktion. - Variablen und Parameter für andere Funktionen innerhalb der derzeitigen Kette an eingebetteten Aufrufe. - Globale Variablen. - (es gibt weitere, auch interne) From 1d5c8afb76ae747ecf52d6ffce1d156a9e26bf51 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:17:45 +0200 Subject: [PATCH 08/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 7fb10d82c..1dd0a3268 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -16,7 +16,7 @@ Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugäng Zum Beispiel: - Lokale Variablen und Parameter der aktuellen Funktion. - - Variablen und Parameter für andere Funktionen innerhalb der derzeitigen Kette an eingebetteten Aufrufe. + - Variablen und Parameter für andere Funktionen in der aktuellen Kette von verschachtelten Aufrufen. - Globale Variablen. - (es gibt weitere, auch interne) From 5327064a4d6cce7aed7ecc7abfe40411528f7232 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:18:19 +0200 Subject: [PATCH 09/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 1dd0a3268..ad4714258 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -22,7 +22,7 @@ Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugäng Diese Werte werden *Wurzeln* genannt. -2. Jeder andere Wert wird als erreichbar betrachtet, wenn dieser von einer Wurzel aus durch eine Referenz oder von einer Kette an Referenzen erreichbar ist. +2. Jeder andere Wert gilt als erreichbar, wenn er von einer Wurzel aus durch eine Referenz oder durch eine Kette von Referenzen erreichbar ist. Wenn zum Beispiel es ein Objekt innerhalb einer Variabel gibt und dieses Objekt eine Property besitzt, die zu einem weiteren Objekt referenziert, dann gilt dieses Objekt als erreichbar. Und diejenigen, die es referenzieren sind auch errecihbar. Detaillierte Beispiele folgen. From acf25bacaefb49d67a1514f86031fa128f088f33 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:19:33 +0200 Subject: [PATCH 10/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index ad4714258..82d3508e9 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -24,7 +24,7 @@ Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugäng 2. Jeder andere Wert gilt als erreichbar, wenn er von einer Wurzel aus durch eine Referenz oder durch eine Kette von Referenzen erreichbar ist. - Wenn zum Beispiel es ein Objekt innerhalb einer Variabel gibt und dieses Objekt eine Property besitzt, die zu einem weiteren Objekt referenziert, dann gilt dieses Objekt als erreichbar. Und diejenigen, die es referenzieren sind auch errecihbar. Detaillierte Beispiele folgen. + 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. Es gibt einen Hintergrundprozess bei der JavaScript Engine, die nennt sich [garbage collector](https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)). Dieser zeichnet alle Objekt auf und entfernd diejenigen, die unerreichbar wurden. From dd11120d6b5c264027740a4b2c4d8fb89d2cfdca Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:20:23 +0200 Subject: [PATCH 11/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 82d3508e9..c6a56f068 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -26,7 +26,7 @@ Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugäng 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. -Es gibt einen Hintergrundprozess bei der JavaScript Engine, die nennt sich [garbage collector](https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)). Dieser zeichnet alle Objekt auf und entfernd diejenigen, die unerreichbar wurden. +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. ## Ein einzelnes Beispiel From 71debe457936681da1788c4bdec41f12fe42b7b7 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:20:38 +0200 Subject: [PATCH 12/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index c6a56f068..1ba216efd 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -28,7 +28,7 @@ Einfach ausgedrückt, "erreichbare" Werte sind diejenigen, die irgendwie zugäng 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. -## Ein einzelnes Beispiel +## Ein einfaches Beispiel Hier ist das einfachste Beispiel: From 6ca271b719c8494da54a6c9e9428db8f592e476f Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:24:12 +0200 Subject: [PATCH 13/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 1ba216efd..742815648 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -138,7 +138,7 @@ Das Ursprungsobjekt ist das selbe wie oben. Denn: family = null; ``` -Das im Speicher abgelegt Bild wird zu: +Das Speicherabbild wird zu: ![](family-no-family.svg) From fb38ff81699cc9902800956be8403f9e0fcfb452 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:24:24 +0200 Subject: [PATCH 14/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 742815648..d6a4315df 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -142,7 +142,7 @@ Das Speicherabbild wird zu: ![](family-no-family.svg) -Diese Beispiel demonstriert, wie wichtig das Konzept von Erreichbarkeit ist. +Diese Beispiel demonstriert, wie wichtig das Konzept der Erreichbarkeit ist. Es ist offentsichtlic, dass John und Ann weiterhin miteinander verbunden sind, beide haben eingehende Referenzen. Aber das reicht nicht aus. From ed6f1d7c08dcbd8bd9051e324f0f199ce96352e9 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:24:44 +0200 Subject: [PATCH 15/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index d6a4315df..94cf373dc 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -144,7 +144,7 @@ Das Speicherabbild wird zu: Diese Beispiel demonstriert, wie wichtig das Konzept der Erreichbarkeit ist. -Es ist offentsichtlic, dass John und Ann weiterhin miteinander verbunden sind, beide haben eingehende Referenzen. Aber das reicht nicht aus. +Es ist offensichtlich, dass John und Ann noch miteinander verbunden sind, beide haben eingehende Referenzen. Aber das reicht nicht aus. Die Verbindung des früheren Objekt `"family"` wurde von der Wurzel gekappt, es gibt keine Referenz mehr zu ihm, deshalb wird die ganze Insel unerreichbar und wird entfernt. From 3408853258e41fdae395bb3aa19a19eb692ad845 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:25:06 +0200 Subject: [PATCH 16/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 94cf373dc..4d6ba0d2a 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -148,7 +148,7 @@ Es ist offensichtlich, dass John und Ann noch miteinander verbunden sind, beide Die Verbindung des früheren Objekt `"family"` wurde von der Wurzel gekappt, es gibt keine Referenz mehr zu ihm, deshalb wird die ganze Insel unerreichbar und wird entfernt. -## Interner Algorithmus +## Interne Algorithmen Die grundlegende Müllsammlung nennt sich "mark-and-sweep". From 09d5781469f1a68a0e213c9d3e2973896e7a0789 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:28:01 +0200 Subject: [PATCH 17/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 4d6ba0d2a..0c294641d 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -204,7 +204,7 @@ Die wesentlichsten Dinge: Moderne Engines implementieren fortgeschrittenere Algroithmen der Müllsammlung. -Das Buch "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al) geht mehrere von dieses an. +Ein allgemeines Buch "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones et al.) behandelt einige von ihnen. 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). From 35ef8a2aec7a36ff3f64d80c98a1bbdc55597cd4 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:39:09 +0200 Subject: [PATCH 18/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 0c294641d..2dbf11a46 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -55,7 +55,7 @@ Nun ist John unerreichbar. Es gibt keinen Weg auf ihn zuzugreifen, keine Referen ## Zwei Referenzen -Wir nehmen uns nun vor, die Referenz von `user` zu `admin` zu kopieren: +Nun stellen wir uns vor, wir kopieren den Verweis von `user` auf `admin`: ```js // user hat eine Referenz zum Objekt From fc38cd573e384e11532004252731dc5fab0e6e40 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:39:25 +0200 Subject: [PATCH 19/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 2dbf11a46..1b80c8a1b 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -33,7 +33,7 @@ Es gibt einen Hintergrundprozess in der JavaScript-Engine, der [Garbage Collecto Hier ist das einfachste Beispiel: ```js -// user hat eine Referenz zum Objekt +// user hat eine Referenz auf das Objekt let user = { name: "John" }; From ab350f1e773e93574a0dfe5f7466410d4f36f334 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:39:51 +0200 Subject: [PATCH 20/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 1b80c8a1b..ff46bcb5a 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -70,7 +70,7 @@ let admin = user; ![](memory-user-john-admin.svg) -Wenn wir jetzt das selbe tun: +Wenn wir jetzt dasselbe tun: ```js user = null; ``` From d5e9d4673cb1992dc5d9741a4e688439e0f4a74d Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:40:54 +0200 Subject: [PATCH 21/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index ff46bcb5a..ed2579e87 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -75,7 +75,7 @@ Wenn wir jetzt dasselbe tun: user = null; ``` -... dann ist das Objekt weiterhin erreichbar durch die globale Variabel `admin`, deshalb ist es im Speicher. Wenn wir auch `admin` überschreiben, kann es entfernt werden. +...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 From 47f14857b800a0de418ba689b2f133877db0ecb0 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:43:28 +0200 Subject: [PATCH 22/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index ed2579e87..181780e52 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -105,7 +105,7 @@ Die resultierende Speicherstruktur: ![](family.svg) -Bis bier hin sind alle Objekte erreichbar. +Ab sofort sind alle Objekte erreichbar. Man entferne nun zwei Referenzen: From e1a3db2fd526f4709a60cf7a1453105209a78238 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:43:46 +0200 Subject: [PATCH 23/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 181780e52..9395c73a7 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -107,7 +107,7 @@ Die resultierende Speicherstruktur: Ab sofort sind alle Objekte erreichbar. -Man entferne nun zwei Referenzen: +Nun wollen wir zwei Referenzen entfernen: ```js delete family.father; From a6d82b989569aa4c96103c02e5535bae57780e2d Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:44:02 +0200 Subject: [PATCH 24/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 9395c73a7..71f9b7ef8 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -116,7 +116,7 @@ delete family.mother.husband; ![](family-delete-refs.svg) -Es reicht nicht aus nur eine dieser Referenzen zu löschen, da alle Objekte weiterhin erreichbar wären. +Es reicht nicht aus, nur einen dieser beiden Verweise zu löschen, denn dann wären alle Objekte noch erreichbar. Aber wenn wird beide löschen, dann können wir sehen, dass John keine eingehende Referenz mehr verfügt: From 3430779bab848cbf23543ae93678ce329058bf23 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:44:12 +0200 Subject: [PATCH 25/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 71f9b7ef8..1f4051f18 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -118,7 +118,7 @@ delete family.mother.husband; Es reicht nicht aus, nur einen dieser beiden Verweise zu löschen, denn dann wären alle Objekte noch erreichbar. -Aber wenn wird beide löschen, dann können wir sehen, dass John keine eingehende Referenz mehr verfügt: +Aber wenn wir beide löschen, dann können wir sehen, dass John keine eingehende Referenz mehr hat: ![](family-no-father.svg) From 8e0b737b676558d5a64120ae769eade601af0644 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:44:46 +0200 Subject: [PATCH 26/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 1f4051f18..e98adebed 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -122,7 +122,7 @@ Aber wenn wir beide löschen, dann können wir sehen, dass John keine eingehende ![](family-no-father.svg) -Ausgehende Referenzen spielen keine Rolle. Nur eingehende können ein Objekt erreichbar machen. Nun ist John unerreichbar und wird vom Speicher entfernt mit all seinen Daten, auf die auch nicht mehr zugegriffen werden kann. +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. Nach der Müllsammlung: From 7e2ff319148f13477b62c1f6318af4d1745fb113 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:47:28 +0200 Subject: [PATCH 27/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index e98adebed..9f4e64383 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -146,7 +146,7 @@ Diese Beispiel demonstriert, wie wichtig das Konzept der Erreichbarkeit ist. Es ist offensichtlich, dass John und Ann noch miteinander verbunden sind, beide haben eingehende Referenzen. Aber das reicht nicht aus. -Die Verbindung des früheren Objekt `"family"` wurde von der Wurzel gekappt, es gibt keine Referenz mehr zu ihm, deshalb wird die ganze Insel unerreichbar und wird entfernt. +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. ## Interne Algorithmen From 2d53fc7d41a841c8b5c198fb2bc5e8469b512925 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:52:53 +0200 Subject: [PATCH 28/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 9f4e64383..91dda2b5d 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -157,7 +157,7 @@ Die folgenden Schritte der "Müllsammlung" werden regulär ausgeführt: - Die Müllsammlung nimmt sich die Wurzeln und "markiert" (erinnert sich an) diese. - Dann besucht sie diese und "markiert" alle von ihnen ausgehenden Referenzen. - 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. -- ... und so weiter bis jedes jede erreichbare Referenz (von den Wurzel aus) besucht wurde. +- ...Und so weiter, bis alle erreichbaren Referenzen (ab der Wurzel) besucht sind. - Alle Objekte außer die markierten werden entfernt. Wir nehmen als Beispiel an, dass die Struktur unseres Objekt so aussieht: From cbef3a37ae8eed1c658a74a0df5a2f74d123820c Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:53:05 +0200 Subject: [PATCH 29/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 91dda2b5d..6d934b9c3 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -160,7 +160,7 @@ Die folgenden Schritte der "Müllsammlung" werden regulär ausgeführt: - ...Und so weiter, bis alle erreichbaren Referenzen (ab der Wurzel) besucht sind. - Alle Objekte außer die markierten werden entfernt. -Wir nehmen als Beispiel an, dass die Struktur unseres Objekt so aussieht: +Gehen wir, beispielsweise, von folgender Objektstruktur aus: ![](garbage-collection-1.svg) From d9834d97b06c4f8a6de295b94407a31f78fc621f Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:53:36 +0200 Subject: [PATCH 30/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 6d934b9c3..f1de64464 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -170,7 +170,7 @@ Beim ersten Schritt werden die Wurzeln markiert: ![](garbage-collection-2.svg) -Dann werden deren Referenzen markiert: +Dann werden ihre Referenzen markiert: ![](garbage-collection-3.svg) From d9ed4e06dd3382ec00e8444ac3434e1d7f4a652e Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:53:55 +0200 Subject: [PATCH 31/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index f1de64464..55e5fec9d 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -174,7 +174,7 @@ Dann werden ihre Referenzen markiert: ![](garbage-collection-3.svg) -... und deren Referenzen, sofern möglich: +...und ihre Referenzen, sofern möglich: ![](garbage-collection-4.svg) From fa3e991791f5868f4147cc3876447ed8e7295d21 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:54:04 +0200 Subject: [PATCH 32/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 55e5fec9d..1258ffe54 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -178,7 +178,7 @@ Dann werden ihre Referenzen markiert: ![](garbage-collection-4.svg) -Nun werden die Objekte, die nicht besucht werden konnten als unerreichbar eingestuft und entfernt: +Die Objekte, die dabei nicht erreicht werden konnten, werden jetzt als unerreichbar eingestuft und entfernt: ![](garbage-collection-5.svg) From 830ccdd4a6c6839db8cbfe4a04e6bf18521ce5dc Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:54:37 +0200 Subject: [PATCH 33/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 1258ffe54..82b4ad1bf 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -182,7 +182,7 @@ Die Objekte, die dabei nicht erreicht werden konnten, werden jetzt als unerreich ![](garbage-collection-5.svg) -Wir können und des Prozess auch als einen Farbeimer vorstellen, der von den Wurzeln ausgehend umgekippt wird und dessen Farbe durch alle Referenzen hindurchfließt und so die erreichbaren Objekte markiert. Die unmarkierten werden dann entfernt. +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. Das ist das Konzept hinter der Müllsammlung. JavaScript Engines applizieren viele Optimierungen, sodass die Ausführung schneller abläuft und sie nicht behindert. From 753e9b5dae27e9198d1c2c26a77839c614910e29 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:55:30 +0200 Subject: [PATCH 34/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 82b4ad1bf..62b07cee9 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -186,7 +186,7 @@ Wir können uns den Prozess auch als riesigen Farbeimer vorstellen, der bei den Das ist das Konzept hinter der Müllsammlung. JavaScript Engines applizieren viele Optimierungen, sodass die Ausführung schneller abläuft und sie nicht behindert. -Ein Paar der Optimierungen: +Einige der Optimierungen: - **Generationsgerechte Sammlung** -- Objekte werden in zwei Sorten unterteilt: "die Neuen" und "die Alten". Viele Objekte taufen auch, erledigen ihren Job und verschwinden schnell. Diese können aggressiv bereinigt werden. Diejenigen die lang genug überleben werden "alt" und werden seltener überprüft. - **Schrittweise Sammlung** -- wenn es eine große Anzahl an Objekten gibt und wir versuchen den ganzen Satz an Objekten abzulaufen und zu markieren, wird dies möglicherweise einige Zeit dauern und sichtbare Verzögerungen in der Ausführung mit sich bringen. Deshalb versucht die Engine die Müllsammlung in Stücke aufzuteilen. Diese Stücke werden dann, separat, eines nach dem anderen ausgeführt. Das verlangt extra Buchführung um die Veränderung zwischen ihnen um Auge zu behalten, jedoch wird man nur wenige kleine Verzögerungen haben, anstatt eine große. From 76cbff8b3cd5b4aedd94cc99956173f015e414e9 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:56:01 +0200 Subject: [PATCH 35/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 62b07cee9..c5fa56259 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -188,7 +188,7 @@ Das ist das Konzept hinter der Müllsammlung. JavaScript Engines applizieren vie Einige der Optimierungen: -- **Generationsgerechte Sammlung** -- Objekte werden in zwei Sorten unterteilt: "die Neuen" und "die Alten". Viele Objekte taufen auch, erledigen ihren Job und verschwinden schnell. Diese können aggressiv bereinigt werden. Diejenigen die lang genug überleben werden "alt" und werden seltener überprüft. +- **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 Sammlung** -- wenn es eine große Anzahl an Objekten gibt und wir versuchen den ganzen Satz an Objekten abzulaufen und zu markieren, wird dies möglicherweise einige Zeit dauern und sichtbare Verzögerungen in der Ausführung mit sich bringen. Deshalb versucht die Engine die Müllsammlung in Stücke aufzuteilen. Diese Stücke werden dann, separat, eines nach dem anderen ausgeführt. Das verlangt extra Buchführung um die Veränderung zwischen ihnen um Auge zu behalten, jedoch wird man nur wenige kleine Verzögerungen haben, anstatt eine große. - **Sammlung zur Leerlaufzeit** -- die Müllsammlung versucht nur zu laufen, wenn die CPU inaktiv ist, um den möglichen Effekt auf die Ausführung zu vermindern. From 3ac6ecf2c696b6fa9f1ffabcd4a6f458553339a0 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:58:36 +0200 Subject: [PATCH 36/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index c5fa56259..79f6be8c8 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -190,7 +190,7 @@ Einige der Optimierungen: - **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 Sammlung** -- wenn es eine große Anzahl an Objekten gibt und wir versuchen den ganzen Satz an Objekten abzulaufen und zu markieren, wird dies möglicherweise einige Zeit dauern und sichtbare Verzögerungen in der Ausführung mit sich bringen. Deshalb versucht die Engine die Müllsammlung in Stücke aufzuteilen. Diese Stücke werden dann, separat, eines nach dem anderen ausgeführt. Das verlangt extra Buchführung um die Veränderung zwischen ihnen um Auge zu behalten, jedoch wird man nur wenige kleine Verzögerungen haben, anstatt eine große. -- **Sammlung zur Leerlaufzeit** -- die Müllsammlung versucht nur zu laufen, wenn die CPU inaktiv ist, um den möglichen Effekt auf die Ausführung zu vermindern. +- **Leerlauf Garbage Collection** -- der Garbage Collector versucht, nur bei Leerlauf der CPU zu laufen, um mögliche Auswirkungen auf die Programmausführung zu reduzieren. 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. From a52d6dfbef34dedac9d3dd37f821857d7a1de04c Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:58:53 +0200 Subject: [PATCH 37/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 79f6be8c8..83076b165 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -199,7 +199,7 @@ Es existieren andere Optimierungen und Sorten von Algorithmen der Müllsammlung. Die wesentlichsten Dinge: - Die Müllsammlung läuft automatisch. Wir können sie nicht zwingen zu laufen oder sie verhindern. -- Objekte bleiben im Speicher solange sie erreichbar sind. +- Objekte bleiben im Speicher erhalten, solange sie erreichbar sind. - Referenziert zu werden ist nicht das selbe als erreichbar zu sein (von einer Wurzel aus): Ein Haufen an miteinander verbundenn Objekte kann als Ganzes unerreichbar werden. Moderne Engines implementieren fortgeschrittenere Algroithmen der Müllsammlung. From f1d06bff365b3d2d81b50abf85285dcdc503a540 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 11:59:27 +0200 Subject: [PATCH 38/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 83076b165..0b2e89364 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -200,7 +200,7 @@ Die wesentlichsten Dinge: - Die Müllsammlung läuft automatisch. Wir können sie nicht zwingen zu laufen oder sie verhindern. - Objekte bleiben im Speicher erhalten, solange sie erreichbar sind. -- Referenziert zu werden ist nicht das selbe als erreichbar zu sein (von einer Wurzel aus): Ein Haufen an miteinander verbundenn Objekte kann als Ganzes unerreichbar werden. +- 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. Moderne Engines implementieren fortgeschrittenere Algroithmen der Müllsammlung. From b01e70c4b922508309d7408c690018e173b38920 Mon Sep 17 00:00:00 2001 From: u-n-known <60901726+u-n-known@users.noreply.github.com> Date: Mon, 27 Apr 2020 12:00:55 +0200 Subject: [PATCH 39/39] Update 1-js/04-object-basics/02-garbage-collection/article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Christian Hegedüs --- 1-js/04-object-basics/02-garbage-collection/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/04-object-basics/02-garbage-collection/article.md b/1-js/04-object-basics/02-garbage-collection/article.md index 0b2e89364..046802595 100644 --- a/1-js/04-object-basics/02-garbage-collection/article.md +++ b/1-js/04-object-basics/02-garbage-collection/article.md @@ -189,7 +189,7 @@ Das ist das Konzept hinter der Müllsammlung. JavaScript Engines applizieren vie Einige der Optimierungen: - **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 Sammlung** -- wenn es eine große Anzahl an Objekten gibt und wir versuchen den ganzen Satz an Objekten abzulaufen und zu markieren, wird dies möglicherweise einige Zeit dauern und sichtbare Verzögerungen in der Ausführung mit sich bringen. Deshalb versucht die Engine die Müllsammlung in Stücke aufzuteilen. Diese Stücke werden dann, separat, eines nach dem anderen ausgeführt. Das verlangt extra Buchführung um die Veränderung zwischen ihnen um Auge zu behalten, jedoch wird man nur wenige kleine Verzögerungen haben, anstatt eine große. +- **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. 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. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy