2017-08-23 2 views
1

Stellen wir uns vor, ich erstelle eine Flux. Dieser Flux hat während der Erstellung Zugriff auf einige Ressourcen erhalten, und ich möchte, dass eine Bereinigung unter Cancel/Complete erfolgt (z. B. Freigabe einiger externer Ressourcen). Schließlich entferne ich alle Zeiger auf diesen Flux, so dass er für die Garbage Collection verfügbar wird. Was passiert bei der Garbage Collection? Erhält mein Flux ein Signal Cancel, damit es aufräumen kann?Wie Fluxes Müll gesammelt werden?

+0

Es ist immer besser, sich nicht auf GC zu verlassen, um Aufräumarbeiten durchzuführen: Sie können nicht garantieren, dass Ihr Objekt jemals gesammelt wird, da GC das Sammeln unbegrenzt aufschieben kann, solange verfügbarer Speicher vorhanden ist. –

Antwort

1
  • Es gibt keine besonderen Bereinigungs Mechaniker GC gebunden (die Flux kein Signal aufheben erhalten, wenn GCed)
  • Hinweis dort eine Fabrik Betreiber ist Flux.using genannt, der eine Ressource liefert und eine Bereinigung Rückruf erfolgt. Andernfalls könnten Sie doFinally verwenden, um die Säuberungsaktion
  • In beiden Fällen durchzuführen, wird dies unter der Annahme, die Flux nicht unendlich ist (z. B. ein Flux.create, die nie ruft complete noch error) oder abgebrochen wird.
  • A Flux in der Regel auf subscribe initialisiert werden soll, so dass, wenn nichts die Ressourcen wahrscheinlich es abonniert hat nicht initialisiert worden ist (wieder einmal, sofern sie in dem Flux.create Rückruf initialisiert werden, sonst die Leistung kann variieren)
+0

Auch wenn 'Flux' etwas in der Finalisierungsphase erhalten hat, ist es immer noch dumm, sich darauf für das Ressourcenmanagement zu verlassen. –

Verwandte Themen