横浜水道道
@相模原市 12月3日 map:x139.3330y35.5562
横浜水道道とは
java.util.ResourceBundle のキャッシュ
私のマシンで Tomcat を Kaffe で起動すると1分以上かかるのに、Sun JDK で起動すると10数秒。理由を調べると GNU Classpath の java.util.ResourceBundle の読み込みが遅いようだ。
ResourceBundle は getBundle() でロードしたバンドルを内部的にキャッシュしているのだが、現在の実装ではそのキャッシュの積極性が足りないように思う。例えば MyResource というリソースを ja_JP というロケールでロードする場合、システムは MyResource_ja_JP, MyResource_ja, MyResource という3つのリソースを読み込む必要がある。GNU Classpath の現在の実装では3つのうち MyResource_ja_JP しかキャッシュしていないが、残りの2つもキャッシュすべきだと思われる。
たぶん起動がかなり速くなると思うが、こういう提案は bugzilla で出しても受け入れられにくいかも。とりあえず積極的なキャッシュを実装してみるけど。結局、私だけのプライベートパッチが増えていく……。
豊田徹也「アンダーカレント」(ASIN:4063720926)
古き良きアフタヌーン、という感じの傑作。色っぽい絵。背景も含めた生活描写がたまらん。誉めてるように聞こえないかもしれないが、映画みたいだ。
Struts on Tomcat/Kaffe/GNU Classpath
「Apache Strutsアプリケーション開発入門」(ASIN:4797327790)に添付のサンプルプログラムを Kaffe で動かそうとしても動かない。Tomcat の localhost_log にえらい長いスタックダンプが出ているのでスタックオーバーフローらしい。gnu.xml.pipeline.ValidationConsumer$ChildrenRecognizer.acceptElement() で無限再帰している感じ。
コードをあれこれ調べるとどう考えても無限再帰する設計になってるとしか思えないので、バグ検索してみると同じ問題にぶつかってる人が既にレポートを出していた。修正を急かすためにコメントを追加しておいた。
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23910
ちょっとしたバグならパッチくらい自分で書くのだが、XML の validation アルゴリズムは詳しくないし。このバグをとりあえず回避するには javax.xml.parsers.SAXParserFactory.setValidating() を書き換えて、引数に true が指定されても無視するようにすればいい。(ひでぇ)