9

リスト内のオブジェクトを開始するためにダイヤモンド演算子を使用しています。ただし、配列オブジェクトの数が増えると、コンパイル時間が数秒から数時間に増加します。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

型推論パフォーマンスの回帰: https://bugs.openjdk.java.net/browse/JDK-8048838

4

2 に答える 2

0

変化する

List<Pair<String, List<Category>>> categoryMappings = null;

List<? extends Pair<String, List<Category>>> categoryMappings = null;

これにより速度が向上するかどうかを確認します。そうしないと、私の JDK/IDE (IntelliJ) はコード スニペットをコンパイルしません。

于 2015-01-04T17:21:11.087 に答える