JAVAのゴミ集め(ガベージコレクション)

JAVAのいいところは、メモリーリークを回避するようにガベージコレクション(以下、GC)をやってくれるところだ。

いつだったか、Objective-Cで、iphoneアプリを作っているときは、細かい神経の多くをメモリーリーク回避のために使って、人間が疲れてしまう感じだった。そういう意味ではGCはとてもありがたい。

prolog化のプログラムはjavaで書いているので、core-i9 9920Xと128Gメインメモリと合わされば、およそメモリ問題はあり得ない気になっていた。

しかし、この間、twitterテキストのprolog化のために一つのプログラムを10時間以上連続で動かし続けていると、プロセスがメモリがやたら食っていくのだ。

例えば、いま、動かしているのだが、こんな状況である。(ターミナルからtopを実行した結果)

KiB Mem : 13172568+total, 10442336 free, 11123846+used, 10044876 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used. 19345396 avail Mem

111ギガ使って、残りは10ギガしかないって言っている。javaは、最大使用メモリを110Gバイトとして動かしているので、もう目一杯使っている感じだ。増えに増えていくので、ガベージコレクションはどうした!!という感情になる。

ただ、javaバーチャルマシン(VM)では、これは特に珍しいことではないようだ。VMは、実際のメモリを使い切らないように発表の場を探しているようだから。実メモリがなくなりそうな時まで、GCは、実行されないように見えると書いてあった。