ひとつのバグを解決するのに、一週間もかかってしまった。
swingで書かれたクライアントのメモリー・リークの問題。JProfilerでテストすると、あるダイアログを開閉した時に、メモリーがフリーされていないことを発見。javax.swing.KeyboardManagerというクラスが、そのダイアログとダイアログ内のコンポーネントへのリファレンスを持ち続けている。何故か。わかんない。そもそも、KeyboardManagerというクラスはJDKでドキュメントされていない。
しつこくテストしていくと、デフォルト・ボタンをクリックしてクローズした時はリークしない。キチンと、KeyboardManagerがクリーンナップされる。エスケープ・キーで抜けても起きない。デフォルト・ボタン以外のボタンでクローズするとリークする。何で? 同じとこ通ってるのに。
何か、デフォルト・ボタンに関係してるらしい、、、けど、わからん。ここら辺で木曜日にすでになっていて、イライラと疲労から、キーボードでディスプレイをぶったたくTVのCMが頭をよぎる。
木曜日の帰り際に、突然、視界の隅をコソコソと、何か口にくわえた鼠が横切ったような気がした。すかさず、くわえてた紙切れを奪い取ってみると、そこには、こう書いてあった。「ライン419と420の順番を変えてみたら、どうなるかなぁ? from 神様」
何故か、神様の言うとおりにやったら、とりあえずメモリーのリークが止まった。すごい、