scala - Observable 需要无限量的内存?

标签 scala rx-java observable rx-scala

由于每个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/分钟。如果单独放置 10 分钟,您可能会看到内存使用情况呈锯齿状。

关于scala - Observable 需要无限量的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098805/

相关文章:

java - RxJava : Conditionally catch error and stop propagation

java - 监听来自 JavaFX 服务的 SimpleListProperty<T> 更新

algorithm - 具有大量集合的优化算法(以功能方式)

scala - 根据 scala sbt 中的参数选择 main (或 : defining alias for runMain)

java - RxJava : Publish subject doOnSubscribe never gets called

swift - RxSwift 扩展 Observable 泛型问题

typescript - 连接 rxjs Observables

scala - 比 acc.reverse:::b 更高效?

java - FlinkCEP的执行时间

java - 将Latest 与已完成的Observable 结合起来