Asakusa Framework Advent Calendar 2017の14日目です。
AsakusaFW 0.10.0で公開された@Spillアノテーションですが、これはCoGroup(やGroupSort)でデータ量が多い場合に ファイルにデータを退避(することでOutOfMemoryErrorを回避)するものです。
ということは、Asakusa on M3BPではデータを全部メモリーに乗せるので、@Spillは関係ないのではないか?と思ったのですが。
M3BPでデータを保持するのは「M3BP(C++)が用意したメモリー」上であり、シリアライズされた状態です。ここに入り切らない場合はバッチが実行できません。
これに対し、CoGroupのメソッドはJavaであり、M3BPから渡されたデータはデシリアライズされてJavaのオブジェクトになり、そのオブジェクトがメソッドに渡されます。
したがって、Javaのオブジェクトを生成する際に「JavaVMのヒープメモリー」が足りなくなると、@Spillが付けられている場合はファイルに退避することになるようです。