‫Wir kommen wieder und das Sie.
‫Ich möchte über die Müllsammler sprechen und wie sie sich um das Gedächtnis kümmert.
‫Die Garbage Collection ist also ein Werkzeug, das verfügbar ist und mehrere Programmiersprachen hat.
‫Und in einigen von ihnen geschieht dies manuell.
‫In anderen geschieht dies automatisch.
‫Und das Dot-Net-Framework bietet eine automatische Speicherverwaltung, sodass Sie den Garbage
‫Collector nicht wie in allen Programmiersprachen manuell verwenden müssen.
‫Programmiersprachen wie C oder C++ und andere haben also eine manuelle Garbage Collection, die Sie ab und zu ausführen müssen,
‫und Sie müssen wissen, wann Sie sie ausführen müssen.
‫Das ist also etwas, das automatisch gemacht wird.
‫Intershop, deshalb ist es so etwas nicht.
‫Ja, viele Leute verwenden sehr oft.
‫Sobald Sie also komplexere Programme haben und wirklich fortgeschritten sind, werden Sie sie ab und zu verwenden.
‫Aber wirklich, es ist nicht etwas, das Sie die ganze Zeit oder in den meisten Fällen überhaupt
‫verwenden müssen.
‫Deshalb ist es sozusagen kein großes Thema.
‫Gut.
‫Nehmen wir an, wir haben dieses Objekt namens Dennis und es ist vom Typ Mensch.
‫Also habe ich eine Klasse namens Mensch erstellt, und es gibt mehrere verschiedene Eigenschaften und so weiter.
‫Am Ende erstelle ich also nur ein Objekt vom Typ Mensch.
‫Und das heißt Dennis.
‫Und indem ich dieses neue Schlüsselwort verwende, benötige ich Speicher, weil es ein Objekt in meinem Gedächtnis erstellt.
‫So weist uns Speicher zu.
‫Und das Framework sorgt dafür, dass Speicher für die Verwendung im System freigegeben wird, sobald Objekte nicht mehr verwendet
‫werden.
‫In diesem Fall erstelle ich also dieses Objekt und verwende es möglicherweise und verwende es möglicherweise immer wieder.
‫Aber irgendwann werde ich es nicht mehr verwenden und vielleicht sogar die Verweise darauf kürzen.
‫Und dann, ja, der Garbage Collector wird es aufräumen, weil dieser Speicher jetzt blockiert ist und der
‫Garbage Collector aufräumen muss.
‫So muss es diesen Speicher zB für andere Objekte wieder zur Verfügung stellen.
‫Betrachten wir es nun aus einer visuellen Perspektive, also haben wir diesen Systemspeicherpool auf der
‫linken Seite und unser Programm auf der rechten Seite und der Systemspeicherpool hat eine Menge Speicher.
‫So können wir diesen Speicher für mehrere verschiedene Programme verwenden.
‫Aber jetzt haben wir unser Programm, das es ausführt.
‫Jetzt erstellen wir in unserem Programm ein Objekt.
‫Jetzt brauchen wir plötzlich ein bisschen Platz in unserem Gedächtnis.
‫Gut.
‫Es gibt also eine Referenz von unserem Programm auf den Speicher, in dem unser Objekt gespeichert ist.
‫Gut.
‫Es gibt also eine direkte Referenz und wir können sie wiederverwenden und von verschiedenen Stellen aufrufen und so weiter.
‫Gut.
‫Und dann haben wir noch einen und noch einen.
‫Wir haben also mehrere verschiedene Objekte, die wir erstellt haben, und jedes Mal wird das neue Objekt erstellt.
‫Im Speicherpool ist ein Speicher zugewiesen, und unser Programm verweist auf diesen Speicher.
‫Diese Referenzen sind also vorhanden.
‫Es gibt also einen Verweis von unserem Programm auf den Speicherpool.
‫An einer Stelle kann die Referenz gelöscht werden.
‫Also löschen wir vielleicht die Referenz, indem wir jetzt eine Variable setzen oder das Objekt null setzen und dann die Referenz
‫auf plötzlich weg.
‫Nun gibt es von unserem Programm keinen Hinweis mehr auf diesen kleinen Speicherplatz hier.
‫Also unser Garbage Collector bemerkt es und sagt, OK, es gibt keine Referenz.
‫Dieses kleine Stück Speicher wird also nie verwendet.
‫Also lass es uns einfach aufräumen oder mal sehen, ich habe geortet oder lass uns einfach für einen anderen Ort frei machen und das
‫passiert dann.
‫Sehen wir uns nun ein Beispiel an, wann der Garbage Collector einsetzt, und ich habe hier eine Funktion
‫namens my function und erstelle hier ein Objekt.
‫Wieder heißt es Dennis.
‫Und dann nennt Dennis seine Methoden, oder wir nennen seine Methode, wie zum Beispiel lehren.
‫Dann legen wir sein Alter fest und rufen dann eine andere Methode auf, werden älter und so weiter.
‫Aber irgendwann wird dieses Dunnies-Objekt im Speicher nicht mehr benötigt, weil der Funktionsaufruf beendet
‫ist.
‫Damit endet die Funktion, das Objekt.
‫Dennis verlässt den Gültigkeitsbereich und es gibt keine Verweise auf Dennis mehr, weil meine Funktion eine Funktion
‫ist und wir dieses Objekt innerhalb einer Funktion haben.
‫Der Umfang davon liegt also innerhalb der Funktion.
‫Sobald der Funktionsaufruf beendet ist, gibt es keinen direkten Verweis mehr darauf, da wir nicht von außerhalb dieser Funktion
‫auf ein Objekt verweisen können, das sich innerhalb einer Funktion befindet.
‫Rechts.
‫Also müssten wir dafür Felder erstellen oder andere Ansätze dafür machen.
‫Aber am Ende muss der Garbage Collector dies dann bereinigen und diesen Speicher neu zuweisen.
‫Und die allgemeine Idee hier ist wirklich, dass dies nur ein einfaches Beispiel ist.
‫Es gibt viele andere Situationen, in denen der Garbage Collector eingreifen würde, aber das haben
‫wir bereits verwendet.
‫Die Konzepte, die Sie hier sehen, haben wir also bereits in anderen Videos oder Vorträgen dieses Kurses
‫gesehen.
‫Deshalb habe ich dieses Beispiel gewählt.
‫Was müssen Sie über die Müllabfuhr wissen?
‫Nun, Sie müssen den Garbage Collector nicht manuell aufrufen, aber Sie können dies manuell tun.
‫Der Garbage Collector benötigt Rechenleistung.
‫Es ist also in einem separaten Thread und es ist sehr leicht.
‫Trotzdem ist eine gewisse Rechenleistung erforderlich.
‫Das Ziel der Garbage Collectors ist es, Speicher freizugeben, aber nicht zu viel Rechenleistung zu verbrauchen.
‫Es wird also im Allgemeinen nicht viel Rechenleistung benötigen, aber es wird nicht ständig aufgerufen oder
‫der Garbage Collector wird nicht ständig ausgeführt, um Speicher freizugeben.
‫Es wird nur ausgeführt, wenn es notwendig ist oder wenn es Dinge für notwendig hält, die es für notwendig hält.
‫Das ist also wirklich der schwierige Teil hier.
‫Der Speicher wird nicht unbedingt sofort zurückgefordert.
‫Es kann eine Weile dauern, bis der Garbage Collector, selbst wenn Sie ihn manuell aufrufen, nicht sofort
‫laufen muss.
‫Dies sind einige knifflige Dinge über den Garbage Collector, die Sie implementieren können, um eine Methode zum Ausführen von
‫Code zu finalisieren, kurz bevor ein Objekt vom Garbage Collector aus dem Speicher freigegeben wird.
‫Dies bedeutet, dass Sie einen bestimmten Code ausführen möchten, kurz bevor ein Objekt bereinigt wird, also kurz bevor der Garbage
‫Collector es bereinigt.
‫Wenn es also beispielsweise keine Referenzen mehr darauf gibt, können Sie die finale lizer-Methode innerhalb dieser Klasse
‫verwenden, um die spezifische Funktionalität zu implementieren, die Sie ausführen möchten.
‫Vielleicht möchten Sie selbst Dinge bereinigen, kurz bevor der Garbage Collector hereinkommt und Ihr Objekt
‫bereinigt oder in den Speicher verlagert oder dieses Objekt aus dem Speicher freigibt.
‫Gut.
‫Wann läuft der Garbage Collector?
‫Nun, wenn das System über wenig physischen Speicher verfügt, wenn der zugewiesene Speicher den voreingestellten
‫Schwellenwert überschreitet, wenn die Collect- oder Collect-Methode des Garbage Collectors aufgerufen wird, obwohl dies eine sehr knifflige Methode
‫ist.
‫Das ist also etwas, das ist.
‫Ja, sehr konkret.
‫Sehr besonders.
‫Wer mehr darüber wissen möchte, sollte sich die Dokumentation zum Garbage Collector anschauen.
‫Aber die Methode Collect wird nicht immer sofort aufgerufen und bereinigt nicht alles direkt.
‫Es ist eher so, als würden Sie dem Tool einen Vorschlag machen.
‫Sie sagen also, OK, Müllsammler.
‫Ich persönlich denke, das wäre ein guter Punkt oder ein guter Ort, um den Müll zu sammeln, aber in einigen Fällen nimmt
‫es ihn möglicherweise nicht an oder tut es einfach später oder so.
‫Vielleicht hat es nur die Müllabfuhr durchgeführt und entscheidet, dass es nicht notwendig ist oder so.
‫Es ist also eine sehr knifflige Sache.
‫Wenn Sie mehr darüber erfahren möchten, lesen Sie die Dokumentation.
‫Aber ich denke, dies ist ein guter Ausgangspunkt, um zu verstehen, was der Garbage Collector tut.
‫Und wie gesagt, in den meisten Fällen werden Sie es nicht brauchen, weil wir heutzutage so viel Speicher haben und wenn Sie keine
‫großen Speicherlecks in Ihren Programmen haben, sollten Sie nie auf diese Probleme stoßen.