_ @IT 事例に学ぶWebシステム開発のワンポイント(6)
JavaのGarbage Collectionの説明です。大変素晴らしい。New[Eden,Survivor], Oldなんて用語、恥ずかしながらはじめて知りました。-Xmxで多くとればよいものでもなかったのですね。
Newを全体の1/3程度にし(-XX:NewSize,-XX:MaxNewSize)、通常差がありすぎるEden:Survivorを2:1くらいですか(-XX:SurvivorRatio)。[through なんでやねん]
というのを理解した上でコードを見直すと良いということですね(Item5)。
GCを意識してコーディングするのは難しいです。parameterのscopeを大きくとると、refactoringもしずらくなりますし、Thread処理を厳密に考えはじめなければなりません。丁寧に普通にコーディング(scope minimum)して、正しくVMをチューニングするでよいのでは。Newの領域をきちんと取れば、ガンガン作って、ガンガン消せることですし。
チューニングが劇的に効くのは非常に限られたケースだと思います。<br>私の言っているのは非常に単純なことで、ローカル変数で巨大配列を毎回作っていないか、static変数にゴミのつまったキャッシュを作っていないかというような基本的なチェックをするのが先決ということです。<br>Javaではイメージのような巨大データの扱いはどうなっているのでしょうかね。SmalltalkのGCではかなり苦しみました。