我正在使用菱形操作符来初始化列表中的对象。然而,随着数组对象数量的增加,编译时间从几秒钟增加到数小时。我的Eclipse自动构建使Eclipse无响应。我注意到这是一个javac问题。当我用
<String, List<Category>>
替换所有的<>
时,编译时间又回到了几秒钟。这是我做错了什么还是Java性能问题?以下是代码,它将花费Java数小时来编译(或者崩溃javac v8u25): List<Pair<String, List<Category>>> categoryMappings = null;
public void reloadStaticData() {
// Left one is the provider's category and right one is ours
try(UoW luow = CoreModule.getInstance(UoW.class)) {
CategoryRepo categoryRepo = luow.getCategoryRepo();
categoryMappings = Arrays.asList(
// Nightlife
new ImmutablePair<>("Bars", Arrays.asList(categoryRepo.findByName("Bar & Pubs").get())),
new ImmutablePair<>("Ski-Bar", Arrays.asList(categoryRepo.findByName("Bar & Pubs").get())),
new ImmutablePair<>("Bar", Arrays.asList(categoryRepo.findByName("Bar & Pubs").get())),
new ImmutablePair<>("Beer", Arrays.asList(categoryRepo.findByName("Bar & Pubs").get())),
new ImmutablePair<>("Pubs", Arrays.asList(categoryRepo.findByName("Bar & Pubs").get())),
new ImmutablePair<>("Clubs", Arrays.asList(categoryRepo.findByName("Bar & Pubs").get())),
new ImmutablePair<>("Dance", Arrays.asList(categoryRepo.findByName("Bar & Pubs").get()
,categoryRepo.findByName("Clubs").get())),
// if I got more than 20 of these ImmutablePairs, javac crashes or takes hours to compile
);
}
}
编辑:正如Sotirios在评论中提到的,这似乎是JDK中报告的问题:
类型推断指数编译性能: https://bugs.openjdk.java.net/browse/JDK-8055984
Arrays.asList(categoryRepo.findByName("Bar & Pubs").get())
是高效的吗?难道 categoryMappings 不应该像其名称所示的那样是一个映射表吗? - Peter Lawrey