Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Der .NET Garbage Collector

  Alt 2. Dez 2004, 14:13
Interfaces im Windows .NET Framework

Abgesehen vom Namen und der Idee (Definition, aber nicht Implementierung) und der Syntax haben die .NET Interfaces mit den Delphi für Win32 Interfaces nicht mehr viel gemeinsam.

Das Referenz-Counting der Interfaces wird vollständig von Delphis Schultern genommen und durch das Referenz-Counting von .NET übernommen. Der erste sehr große Vorteil ist: Objekte und Interfaces dieser Objekte werden gemeinsam gezählt. Kurz gesagt: obiger Code, welcher in Win32 zu einer AV führen kann, funktioniert unter .NET einwandfrei.

In .NET übernehmen Objekte die Referenzzählung nicht mehr selbständig, wie es unter Win32 nötig war. In .NET wird diese durch den .NET eigenen Garbage Collector (GC) übernommen. Die genauen Interna des GC werde ich zu späterer Zeit, in einem anderen Tutorial, erläutern. Momentan soll ein kurzer Auszug reichen.

Wird unter .NET die Instanz einer Klasse erstellt (z.B. TObject.Create;), also ein Objekt, so erfolgt das in der Intermediate Language (IL, der .NET Bytecode) durch einen Aufruf zu newobj. newobj berechnet dann die Menge an Speicher, welche durch das neue Objekt benötigt wird. Anschließend wird die Menge an Speicher hinzugefügt, die .NET zur Verwaltung des Objektes (Overhead) benötigt. Je nach System sind das zur Zeit 8 Bytes (32 Bit-Systeme) oder 16 Bytes (64 Bit-Systeme). .NET nutzt ein internes Referenz-Counting. Es ist natürlich intern etwas komplizierter als hier dargestellt, aber das soll für dieses Tutorial genügen.

Wird eine Referenz auf ein Objekt oder ein Interface gelöscht (oder überschrieben), so wird der Referenzzähler des Objektes, bzw. des Objektes welches das Interface implementiert, um eins verringert.

Hier liegt der Unterschied, unter Delphi für Win32 hat das Objekt nur für Interfaces intern einen eigenen Refernz-Counter genutzt. In .NET verwaltet das System selbst einen Referenz-Counter für das Objekt, unabhängig ob auf dieses direkt oder über ein Interface zugegriffen wird.
Daniel Lizbeth