Observable Chain Dies 和 Intellij Lags/Freezes

Observable Chain Dies and Intellij Lags/Freezes

我调用了这个简单的 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 中的内容创建一个新映射。

但是,出于某种原因,在 filter/map 的第十次和第二十次迭代之间,可观察对象的执行停止了,IntelliJ 开始像疯了一样滞后,直到我重新启动才真正恢复。我的内存设置很高:

-Xms2048m
-Xmx4096m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops

我的堆指标没有爆炸:

唯一的其他指标是我有一个超长的字符串打印到用户 ID 列表的控制台。关于为什么这个 observable 会失败的任何想法?

Arrays.asList returns 一个不可变列表,因此当您尝试添加额外的用户 ID 时,您将获得一个 UnsupportedOperationException。所有的异常处理都可能是导致速度显着下降的原因。

不使用 Arrays.asList,而是创建一个 new ArrayList,然后添加初始 lookupId。