由于每个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/