Observable 需要无限量的内存?

Observable takes infinite amount of memory?

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

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

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

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


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

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

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