Angenommen, ich habe drei Objekte, A, B und C.Java Soft-Referenzen
A
mit einem weichen Bezug auf B
bezieht.
B
bezieht sich auf A
mit einer starken Referenz.
B
bezieht sich auch auf C
mit einer starken Referenz.
C
bezieht sich auch auf B
mit einer starken Referenz.
C
bezieht sich auch auf A
mit einer starken Referenz.
Nehmen wir an, dass es keine externen Referenzen zu B
oder C
gibt. Wenn wir uns eine Situation vorstellen, in der der Garbage Collector entscheidet, dass, wenn es möglich ist, versucht wird, den Speicher freizugeben, auf den weiche Referenzen zeigen, werden B
und freigegeben, A
? Oder tritt eine Art zirkuläre Abhängigkeit auf, bei der die Backlinks von B
und C
bis A
irgendwie verhindern, dass eine Speicherbereinigung stattfindet? Mein Verständnis ist, dass der GC Soft-Referenzen sammeln sollte, bevor OutOfMemory geworfen wird.
Dies ist eine sehr speicherintensive Anwendung, die eine sehr große Hierarchie modelliert, und als solche möchte ich, dass der GC "Zweige" der Hierarchie verwerfen, solange es keine starken Verweise darauf gibt. Ich kann die Zweige bei Bedarf neu generieren, aber das ist rechenintensiv, also habe ich einen Cache mit weichen Referenzen implementiert. Meine allgemeine Strategie besteht darin, weiche Referenzen zu haben, die nach unten zeigen (d. H. Zu Unterknoten des Baums) und starke Referenzen, die zurück zu den Elternknoten zeigen.
Ja, B und C können GC'd, aber der Garbage Collector _extremely_ stumm in Bezug auf die Auswahl, welche weichen Verweise auf GC ist. –
Das ist in Ordnung, solange es die Sammlungen schließlich tut. Um das gesamte, echte Datenmodell zu speichern, würden ungefähr 80 GB Speicher benötigt. Der Caching-Mechanismus scheint zu funktionieren, aber ich wollte sicher sein. – bss36504
Ich schlage vor, Sie haben einen kleinen Cache, der völlig starke Referenzen ist, und dies überläuft einen Cache von weichen/schwachen Referenzen.Auf diese Weise, wenn Sie GC und das System aufholen müssen, verliert es auch nicht seinen Cache vollständig (dh Sie könnten fast alle weichen Referenzen gefunden werden bereinigt) –