unknown: Objekt Instanzen speichern

Beitrag lesen

Damit gäbe es keine Verdoppelung der DOM-Objekte und die GC der JS-Engine könnte eigenmächtig DOM-Objekte aus dem Speicher räumen.

Die Verdoppelung an sich ist ja an und für sich nicht so schlimm. Wenn alle referenzierten DOM-Objekte auch wieder dereferenziert werden ist alles in Butter. Man darf nur keine Stelle vergessen, auch auf C++ Seite.
Bei IE (bis 6, dann kahm C#, dort weiss ich es nicht mehr) war das DOM als COM realisiert. Jeder Objekt hat dort einen Referenzcounter, der geht beim Anlegen auf 1, bei jeder weiteren Stelle, wo dieses Objekt gespeichert ist muss AddRef gerufen werden, das inkrementiert den Counter. Wird das Objekt an einer Stelle nicht mehr benötigt, wird Release aufgerufen, und damit der Counter wieder runtergezählt. Ist dieser 0, löscht sich das Objekt selbst aus dem Speicher. Wird das Objekt nach JS weitergereicht, wird in dessem Speicher(COM Apartment) ein Proxy-Objekt angelegt. Diese leitet alle Methodenaufrufe an das eigentliche Objekt weiter, auch AddRef und Release, nur das der Proxy einen eigenen Counter verwaltet und den am eigentlichen Objekt nur einmal erhöht bzw. runterzählt, beim Anlegen bzw. wenn der Proxycounter auf 0 geht.
Lange Rede kurzer Sinn, das ist nicht so der Unterschied zu einer Garbage Collection, nur dass der Speicher gleich freigegeben wird wenn der Counter auf 0 geht. Aber die Referenzen müssen auch wieder aufgelöst werden, in beiden Fällen, sonst hat man ein Zombieobjekt.