2016-03-26 14 views
0

Ich bin frisch bei Rx, ich habe scheinbar beobachtbare Pufferereignisdaten. Mit cold observable oder replay, die Datenstrom zu späteren Betrachter sogar über lange Zeit später emittieren wird. Aber wann wird es verwüstet werden? Außerdem, was sollte Speicher für die Verwendung von Rx sein?Wie verwendet der RxJava/Scala Observable Müll Daten?

Antwort

1

Die Garbage Collection folgt den normalen Regeln für Java: Wenn es einen harten Verweis darauf gibt, wird es für immer bestehen bleiben. Das heißt, wenn Sie einem Feld eine Observable zugewiesen haben, ist diese Observable nicht für die Garbage Collection geeignet. Wenn dies das Ergebnis eines replay() - Operators ist - oder wenn ein replay() -Operator ihm vorgeschaltet ist - werden alle Daten im replay() -Operator ebenfalls im Speicher gehalten.

Es gibt replay Varianten, die Ihnen helfen können, die referenzierten Objekte, die im Speicher gehalten werden, entweder mit einem Timeout oder nach Anzahl zu begrenzen.

Sie können auch eine SoftReference für das Observable selbst verwenden.

+0

Mit einer weiteren Suche, bin ich auch fast Referenzbeschreibung dieses Themas finden.Straightly sagen, wie viel Rx Stil wird zusätzlichen Speicher im Vergleich zu normalen Workflow verwenden? Kann Quantisierung der Verwendung eines Observable zählen, enthält einige Operation, wie map? Em ... Danke für jeden Rat. – LoranceChen