私はダイヤモンド演算子を使ってリスト内のオブジェクトを開始しています。しかし、配列オブジェクトの数が増加すると、コンパイル時間は数秒から数時間に増加します。私の日食の自動ビルドは、私の日食を非応答にしました。私はそれがjavacの問題であることに気付きました。 <>
をすべて<String, List<Category>>
に置き換えると、コンパイル時間はほんの数秒に戻ります。これは私が間違っているのか、まさにJavaのパフォーマンス上の問題なのでしょうか?ここでダイヤモンド演算子を使ったJavaオブジェクトの初期化ひどいjavacコンパイル時のパフォーマンス
をコンパイルするために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
);
}
}
編集: ソティリオスはコメントで述べたように、JDKで報告された問題のようです:
型推論指数コンパイル性能: https://bugs.openjdk.java.net/browse/JDK-8055984
タイプ推論パフォーマンスの低下: https://bugs.openjdk.java.net/browse/JDK-8048838
あなたはそのjavacの問題か? Eclipseはjavacの代わりに独自の増分コンパイラを使用します。 – WonderCsabo
コンパイラがクラッシュしたらどういう意味ですか?スタックトレースはありますか? –
mvnクリーンインストールでも、 "172のソースファイルをコンパイルする"に達したときにスタックする。 –