Laden...

[erledigt] Garbage Collector - Methodendesign

Erstellt von Beppo98 vor 13 Jahren Letzter Beitrag vor 13 Jahren 934 Views
B
Beppo98 Themenstarter:in
71 Beiträge seit 2009
vor 13 Jahren
[erledigt] Garbage Collector - Methodendesign

Gut Tag,

ich beschäftige mich gerade mit dem Thema Garbage Collector, dazu ist eine Frage aufgetaucht.

Beispiel:


public String GetNewPersonName(String pVorname, String pNachname)
{
   Person myPerson = new Person();
   myPerson.Vorname = pVorname;
   myPerson.Nachname = pNachname;

   return myPerson.GetName();
}

In diesem Beispiel werden sämtliche Anweisungen der Methode und die benötigten Parameter auf dem Stack abgelegt. Dann wird ein Referenztyp myPerson erzeugt, dieser wird standardmäßig auf dem Heap abgelegt.

Wenn jetzt die Methode wieder verlassen wird, wird der Speicherbereich auf dem Stack wieder freigegeben, was passiert aber mit dem Referenztyp der auf dem Heap liegt?

Ist es nötig noch explizit

myPerson = null;

zu codieren, obwohl dies im Beispiel einen kleinen Umbau erfordern würde, oder wird die Referenz auf das Objekt mit Beenden der Methode automatisch gelöst?

Gruß Beppo

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Du brauchst die Variable nicht explizit zu nullen.
Genau genommen wird ja auf dem Stack eine Referenz erzeugt, die auf ein Objekt auf dem Heap verweist. Diese Referenz wird ganz normal mit abgeräumt nach Ende der Methode.
Der GC räumt Objekte automatisch ab, wenn sie von keinem Code im Programm mehr erreicht werden können, also i.d.R. wenn keine gültigen Referenzen auf das Objekt mehr vorhanden sind.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

5.941 Beiträge seit 2005
vor 13 Jahren

Salute Beppo

In deinem Fall ist es noch einfacher zu erklären / begründen.
Deine Person ist eine lokale Variable. Wenn der Gültigkeitsbereich der lokalen Variable (Methoden Body) verlassen wird, ist sie nicht mehr gültig / vorhanden bzw. wird abgeräumt.

Allerdings nur, wenn du nirgendwo sonst eine Referenz darauf hast, wie MarsStein schon angemerkt hat.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

B
Beppo98 Themenstarter:in
71 Beiträge seit 2009
vor 13 Jahren

Vielen Dank für die schnellen Antworten. Damit ist meine Frage beantwortet 😃

Gruß Beppo