我调用了这个简单的 Observable:
Map<Integer, List<Long>> localLookup = new HashMap<>();
return Observable.from(userList)
.filter(lookupId -> userLookup.containsKey(lookupId))
.map(lookupId -> {
int userId = userLookup.get(lookupId);
if (localLookup.containsKey(userId)) {
localLookup.get(userId).add(Long.valueOf(lookupId));
} else {
localLookup.put(userId, Arrays.asList(Long.valueOf(lookupId)));
}
return lookupId;
}).toList().map(results -> {
return localLookup;
});
userList 是一个 List<String>
大小为 18000。userLookup 是一个预先存在的映射,我正在根据 userLookup 中的内容创建一个新映射。
但是,出于某种原因,在过滤器/映射的第十次和第二十次迭代之间,可观察对象的执行停止发生,IntelliJ 开始像疯了一样滞后,直到我重新启动才真正恢复。我的内存设置得相当高:
-Xms2048m
-Xmx4096m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops
唯一的其他指标是我有一个超长字符串打印到用户 ID 列表的控制台。关于为什么这个 observable 会出错,有什么想法吗?
最佳答案
Arrays.asList
返回一个不可变列表,因此当您尝试添加额外的 userId 时,您将得到一个 UnsupportedOperationException
。所有的异常处理都可能是导致速度显着下降的原因。
不使用 Arrays.asList
,而是创建一个 new ArrayList
,然后添加初始 lookupId。
关于java - 可观察链死亡和 Intellij 滞后/卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570375/