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
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
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
Vielen Dank für die schnellen Antworten. Damit ist meine Frage beantwortet 😃
Gruß Beppo