Also erstmal war da ja der , also bitte nicht zu ernst nehmen. Ich hätte vermutlich einfach nix sagen sollen - ich hab' nur nicht verstanden warum du Dinge lang & breit erklärst, die mit dem was du eigentlich sagen wolltest nix zu tun haben
Was die Begriffe angeht: das ist falsch rübergekommen: ich glaub schon dass du dir die nicht ausgedacht hast. Ich finde sie nur trotzdem doof.
Zurück zum Thema:
worum es mir hier geht, ist, dass der Tod eines Objektes in Java keinen Event-Charakter hat (Begriff ad hoc ausgedacht), so dass man sofort auf ihn reagieren könnte, sondern erst später festgestellt wird und auch erst später festgestellt werden kann.
Ja, genau, das ist der Knackpunkt!
Nur was ich nicht verstehe: was hat das deiner Meinung nach mit "generational GC" vs. "non-generational CG" zu tun?
Ich behaupte nämlich: gar nix.
Diesen "Event-Character" könnte es nur geben, wenn sofort bei Update jeder einzelnen Referenz im Programm immer geguckt wird, ob dadurch jetzt Objekte in der Luft hängen, und diese dann eben auch freigegeben.
D.h. man müsste bei jedem Update einer Referenz irgendwie prüfen, ob das "alte" Objekt dadurch "unreachable" geworden ist.
Eine Möglichkeit wäre nach jedem Update einer Referenz den ganzen Graphen mit einem der bekannten GC Algorithmen zu checken. Dass das zu langsam ist, ist glaube ich klar.
Eine andere Möglichkeit wäre Reference-Counting, das ist grade noch akzeptabel schnell, nur das kommt eben mit Zyklen nicht klar. Also auch no-go.
Und eine Möglichkeit die nicht viel zu langsam ist, aber trotzdem mit Zyklen klarkommt, kenne ich nicht.
Dass ein GC zu Garbage gewordene Objekte nicht sofort erkennen kann, hat also damit, ob jetzt Generationen zur Optimierung der Collections verwendet werden oder nicht, nichts zu tun. Sondern einfach damit, dass eine Collection zu teuer ist, um sie nach jedem Update einer Referenz zu machen.
Die Freigabe von Objekten wird also sowieso schonmal bis zur nächsten Collection verzögert.
Das einzige was Generationen hier noch ändern, ist, dass es passieren kann dass Garbage-Objekte auch bei der nächsten Collection nachdem sie zu Garbage wurden nicht gefunden werden, sondern u.U. erst ein paar Collections später. Die Generationen bewirken hier also nur eine zusätzliche Verzögerung.