Observable需要无限量的内存?

时间:2017-02-07 19:56:09

标签: scala rx-java observable rx-scala

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

我已使用以下代码测试了此假设:

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

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

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

1 个答案:

答案 0 :(得分:6)

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

您可能在这里遇到的是成千上万的盒装Long值。如果你有大量的RAM,GC可能无法启动但只是将堆大小增加到最大值。假设您真的可以获得1微秒的计时器,那么您的分配率大约为24 MB / s或1.4 GB /分钟。如果单独放置10分钟,你可能会在内存使用方面看到类似锯齿状的形状。