「2回目」にはっておきました。回目に増やすっていう判断をしている気がしますね。なっているのが怪しいですね。なんか数え間違えている気がするなあ。ならなければならない。個用意しておけば、ヒープの拡張は起きないだろう。拡張はしていないことがわかりました。メモリの消費量が多いですね。そこはちょっと気になりますね。気になるので、きちんと深掘りしておきましょう。インフラを使ってメモリ消費をキッチリかっちり調べる、というツールがあります。使って、具体的にどこがメモリを食っているか調べてみましょう。素直に動いてくれませんでした。http://www.atdot.net/fp_store/f.h4owjn/file.copipa-temp-image.png時系列で、どの関数がどの程度メモリを食っているのか示す図になっています。食ってることがわかります。いうことで、一番メモリくってるときの値なので、最大を見るのが適当でしょう。だいたい実測値の値が出ました。要素の配列のサイズでしょう。いうことで、検討通りです。出力を、秘伝のスクリプトをちょっと弄ってやると、こんな感じで行番号が得られます。メモリを食っていることがわかります。マークに必要となる、マークスタックを確保するための領域です。食っていた、ということなのですね。このマークスタックがどのように使われるか、ちょっと解説しておきます。endend擬似コードで書くとこんな感じです。スタックに突っ込んでおきます。取り出して、それをマークしていく、と。空になるまで続きます。追加の消費が必要になるわけですね。いうわけで、謎はすべて解けたのでした。処理を見ると、あんまり積極的に掃除していなさそうなので、その辺かなぁ、などと。解放してあげると良いんじゃないかと思う。メモリ解析のためのインフラがない、って声をよく聞くので、頑張ればここまで出来るんだよ、というデモンストレーションでした。いうわけで、これくらいは頑張って下さい。いや、専門知識などが多少要るので、そんな頑張れないかもしれませんが、その時はお問い合わせ頂ければ、なんらかのアドバイスなど出来るかもしれません。ログを一緒に持ってきて下さい、少なくとも。見せられて、「メモリを減らしたい」と言われる。いわゆる業務命令というやつだ。今回考えるプログラムをこのページから引用する。