java - 可观察链死亡和 Intellij 滞后/卡住

标签 java intellij-idea rx-java vert.x

我调用了这个简单的 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

而且我的堆指标没有爆炸:enter image description here

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

最佳答案

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

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

关于java - 可观察链死亡和 Intellij 滞后/卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570375/

相关文章:

function - Grails域功能不起作用

java - RxJava - 在另一个 Observable 完成时启动一个 Observable

rx-java - 将 bool 可观察值列表映射到输出,只要所有输入均为 true,该输出就会发出 true

java - @ImportResource 不工作

java - 如何在 Eclipse 中搜索方法名称

java - Java7 "Solr/Lucene"bug有多严重?

java - 使用 Spring 引导在 Intellij 中实时加载 Assets

java - 将重复对象添加到 GridPane 作为新行

intellij-idea - Intellij 中的 jitpack/gradle 问题

android - RxJava2 - 重复任务的间隔并在有条件的情况下运行可观察对象