>定期的に手動GCかませるようにしたら直った
それは、メモリリークがあると思われる。
4Gのメモリを全部使い切るのは並大抵の事じゃない。
まあ、Javaでメモリリークするのって
アフォみたいなハッシュの使い方をしたりとかかな。

ちなみに、System.gc()を入れても
その瞬間にはgcしない。
それより、明示的に不要なインスタンスへのポインタに
NULLを入れておくと効果的。

ほんとにメモリを使いまくるようなやつは、
設計段階でsleepする箇所を決めておく必要はある。