2

由于每个Observable都有一个可以追溯到第一个发出的值的缓存,因此用于存储此缓存的内存量似乎没有限制。

我已经用以下代码测试了这个假设:

Observable.interval(1.microsecond).map(_ => System.currentTimeMillis)
  .subscribe(x => ())

事实上,在应用程序运行的整个 10 分钟内,内存使用量一直在稳步上升。


我的问题是是否可以在Observable没有缓存的情况下实例化一个特殊的,或者指示它在某个级别上限制它的缓存?

4

1 回答 1

6

只有一组特定的 Observables(例如 ReplaySubject、replay()、GroupedObservable)倾向于缓存项目,但不是Observable.interval()

您可能在这里遇到的是数十万个装箱的 Long 值。如果你有很多 RAM,GC 可能不会启动,而只是将堆大小增加到最大值。假设你真的可以得到一个 1 微秒的计时器,你有大约 24 MB/s 的分配率或 1.4 GB/分钟。如果单独放置 10 分钟,您可能会在内存使用中看到锯齿状的形状。

于 2017-02-07T22:05:44.927 回答