GCは単純なマーク&スィープ方式だね。
こいつは、オブジェクトが多くなればなるほど時間がかかるという弱点を持ってる。

上の話は、言語で一括してメモリプールを取るんじゃなくて
オブジェクトを作るたびにmalloc()が走るからメモリ使用状況が
把握しにくいから嫌、って話じゃない?
んで、解決方法としては、malloc()のソースとか持ってくるなりして
アロケータを適当に書く、と。

実際には、言語内で確保したオブジェクトをプールしてるのか、
しばらくするとアロケータもGCもあんまり走らなくなるんだけどね。
(複雑なサンプルでは試してないけど、単純ループとか再帰とかでは。)