なんかサーブレットを作ってると、3回リロードしたときに挙動が変わるので困ってます。
Tomcat5.5.17で発生。
Glassfishだと発生しない。
と思ったら、JDK1.5とJDK1.6の違いみたい。
もちろん、フィールドに状態を保存したりしてないし、メソッドひとつで完結する処理なんで、リロード回数で挙動がかわるようなサーブレットじゃないんだけど。
気になる。
追記
ダミーの変数を追加したら、3回が11回になった。怪しい。
上の処理。
デバッガで追うと正しい動きするし、変数の初期値変えると挙動が変わるし、Java6のバグに見える。
whileでcontinueしたときに変数がリセットされるような、そんな感じ。
JDK1.5で動かしたときにはちゃんと動くので、コンパイラじゃなくてVMの方がくさい。
追記:
現象としては
remark = true; preRemarkBreak = brk; brk = true; continue;
という部分で、preRemarkBreakを変更しても、continueして戻ったところでpreRemarkBreakが元に戻っています。
HotSpotの挙動でしょうか?
基本的にはbrkがfalseのときにしかここを通らないはずなので、宣言部の初期値を
boolean preRemarkBreak = false;
にして逃げてます。
そこまでしてJDK1.6で動かす必要はないんだけど。