私は、メモリ内のかなり複雑でビッグデータ構造(数GB)にデータを準備してディスクにシリアル化するJavaプログラムと、メモリ内のシリアル化されたデータ構造を読み戻す別のプログラムを持っています。デシリアライズのステップがかなり遅く、CPUにバインドされていることに驚いた。(100%のCPU使用率ですtop
が、で読み取るのは3〜5 MB / sのみiotop
です。これは、ハードドライブでのシーケンシャル読み取りの場合は非常に低くなります)。CPUはかなり最近のものであり(Core i7-3820)、構造はメモリに収まり、スワップスペースは構成されていません。
なんでそうなの?CPUをボトルネックにしないJavaでオブジェクトをシリアル化する別の方法はありますか?
重要な場合の逆シリアル化コードは次のとおりです。
FileInputStream f = new FileInputStream(path);
ObjectInputStream of = new ObjectInputStream(f);
Object obj = of.readObject();