Warum gibt es keine NULL-Reference



  • Bashar schrieb:

    Und wer verschiebt die MyClass-Pointer? Löst das überhaupt ein Problem, oder verschiebt es das nur?

    Die kann doch der GC ändern sobald er das Objekt verschiebt. Wenn es auf jedes Objekt nur genau einen echten Pointer gibt, sehe ich eine Reihe von Problemen weniger.

    So ein Problem kann es doch nicht sein, alle Pointer zu ändern. Der GC durchläuft sie ja ohnehin während der Mark-Phase.

    Hmmm bei ner Full Collection schon, bei einer Gen0 IMHO nicht. Laut dem zweiten Link (dort weiterführender Link "Part 2") werden bei einer Gen0 Collection Referenzen zu Objekten in höheren Generationen ignoriert, wenn sie nicht dirty sind. Die Objekte in höheren Generationen könnten aber Referenzen auf Objekte jüngerer Generationen haben, die dann nicht angepasst würden (weil sie nicht durchlaufen werden). Das verschieben jüngerer Objekte im Speicher macht auch die alten Objekte nicht dirty, die werden nur angeschaut, wenn die Referenz von einem Objekt (oder null) auf ein anderes Objekt (oder null) gelegt wird, aber nicht wenn es beim selben Objekt bleibt, welches verschobenen wird - sonst wäre ja immer alles dirty, also 0 Gewinn durch Generationen.

    Aber ok, ich leg jetzt auch nicht dafür meine Hand ins Feuer. Aber ich meine schon, dass so verstanden zu haben, als ich mich mal eine Zeit lang mit dem Thema beschäftigt habe. Wenn du da allerdings andere Informationen hast, würden die mich auch sehr interessieren. 🙂


Anmelden zum Antworten