大きなサンプル用と小さなサンプル用の 2 セットの HProf ダンプがあります。どちらも、私が持っている膨大なデータの非常に小さなサンプルの結果です。私は自分のアプローチのボトルネックを理解しようとしています。
これは、大規模サンプル ( http://pastebin.com/PEH8yR3v ) と小規模サンプル ( http://pastebin.com/aR8ywkDH )のヒープ割り当てデータです。
char[] が私のメモリの大部分を占めるものであることに気付きました。また、char[] によるメモリ使用量の割合は、小さなサンプル実行から大きなサンプル実行までさまざまです。サンプル全体をプロファイリングすると、どのように変化するかわかりません。
しかし、私が懸念している重要な質問は、10GB のデータを書き戻す 3GB のサイズの入力データに対して実行しようとしたときに、このプログラム (READ、PARSE/PROCESS、WRITE) を使用することです。サイズが 1GB を超えないリストを除いて、メモリには何も格納しません。これは単純な読み取り、処理、書き込みパイプラインです。これを考えると、私のプログラムは実行中にまだ約 7GB のメイン メモリを消費します。
これが私のアプローチです。
read a file in from a string Iterator
for each line in ip_file perform
op_buffer = myFunction(line)
write op_buffer to op_file.
Perform this for all 20K files in my input data.
def myFunction(line)
{
var :String = null;
for each word in line
{
var class_obj = new Classname(word)
op_line + = class_obj.result
}
return op_line
}
myFunction 内で作成されたオブジェクトは myFunction の最後で範囲外になるため、それらを削除/解放することは気にしません。ボトルネックを感じていますか?