私は巨大なデータセットを扱っています。私は並列処理が必要ですが、私はjava8 stream apiに問題があります。私はそのようなコードを単純化しました。 parallelStream()
をstream()
に変更すると私のプログラムは最大メモリとして16GBを使用します。java8 parallelstream()は、stream()と比較してメモリ使用量が多くなります
以下のコードでは、32GBのメモリでは不十分です。これを改善する方法はありますか?
List<Class2> result = querySource
.parallelStream()
.map(m -> {
List<Class1> rows = getSourceByDB(m);
return rows;
})
.map(m -> {
List<Class2> result = Common.convertToClass2(m);
return result;
}).flatMap(f -> f.stream())
.collect(Collectors.toList());
ありがとうございます。ところで、いくつかの調査の後、私はtimeseriesデータを扱っています。 1時間分のデータを60個のチャンクで取得しようとすると、30 GBのチャンクでチャンクするだけで十分です。しかし、java8のparallelstream()APIやexecutorserviceを使用して60個のチャンクを並列化しようとすると、64 GBのヒープが簡単に埋め尽くされます。それから、巨大なGC休止時間のためにエラーが発生します。私はJVMの問題があると思う。メモリをクリアすることはできません。アドバイスはありますか? –