ごりごり最適化

今日はごりごり最適化の日。
一覧表示が特定機能を使うと100秒くらいかかってしまうのを8秒くらいに短縮する大改修をしたのだが、その影響で本来の機能で最大10%位の速度低下。それをゴリゴリやって-10%〜+3%位にまでするのが今日のタスクフォース。
やることは単純で、無駄がありそうな箇所をまずリファクタリング。そうすると無駄な処理が消えてしまったり、浮き彫りになったりするので、そこで最適化。それをメソッドを、クラスを跨いで、あっちこっち。落とし穴がたくさんあるシステなので、まとめて考えてから一気に書き換えてしまうと、思わぬバグを作り込んでしまうのだ。
だからタイピング量はかなり凄いことになる。書いては消しての繰り返し。
今回の元となった改修では機能を追加したのに行数が減っていくという減少が発生したが、今度は微増状態。
最適化ってパズルを解くようで楽しいよね。自分の場合はアセンブラレベルを頭に浮かべながらやるスタイルを貫いてきたのだが、これがなんともJavaでは通用しないことも少なくなかったり。HotSpotの最適化や、VMの特性が飲み込めていないという事と、DBやら、TCP/IPやらの外的要因が多いのがいけないのかも。
絶対解いてやるぞ。負けるか。
つうか、ベンチマークかけてる間ひじょ〜に眠いんですが。