上の処理。
デバッガで追うと正しい動きするし、変数の初期値変えると挙動が変わるし、Java6のバグに見える。
whileでcontinueしたときに変数がリセットされるような、そんな感じ。
JDK1.5で動かしたときにはちゃんと動くので、コンパイラじゃなくてVMの方がくさい。
追記:
現象としては
remark = true; preRemarkBreak = brk; brk = true; continue;
という部分で、preRemarkBreakを変更しても、continueして戻ったところでpreRemarkBreakが元に戻っています。
HotSpotの挙動でしょうか?
基本的にはbrkがfalseのときにしかここを通らないはずなので、宣言部の初期値を
boolean preRemarkBreak = false;
にして逃げてます。
そこまでしてJDK1.6で動かす必要はないんだけど。