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