class garbage collection

 nekopさんに教えてもらったキーワード “class garbage collection” で説明を発見しました。(多謝>nekop)

 Java Forums – Static class garbage collection にそのまま書いてあります。某書籍に書いてあった例は片手落ちで、普通のシステムクラスローダを使ってCLASSPATHからロードされたstaticフィールドを持つクラスについては、Javaアプリケーションが終了するまで勝手にアンロードされることはないとのことです。これは、システムクラスローダがそのクラスへの参照を保持し続けるからです。

 独自のクラスローダを使うアプリケーションでは、気にする必要があります。TomcatなどのServlet/JSPコンテナではWebアプリケーションのロードをリロードを独自に行う必要があるので独自のクラスローダを使っています。

 実際のものは調べていませんが、もしTomcatが用意しているクラスローダが動的なクラスローダで、必要なときしかTomcatがこのインスタンスを生成しないとすると、クラスローダがガーベッジコレクトに回収される場面がでてきます。すると、そのクラスローダからロードされて、クラスローダからしか参照されていなかった「staticフィールドを持つクラス」は、参照していたクラスローダがいなくなるため、どのクラスからも参照されなくなってしまいます。このため、回収される可能性があるわけです。つまり、WebアプリケーションでSingletonクラスを使おうとすると、Servlet/JSPコンテナが用意しているクラスローダの実装によっては、問題が発生する可能性があるわけです。この危険性を避けるためには、Webアプリケーションの主となるServletクラスからSingletonクラスのインスタンスをstatic参照するようにしておけば、参照オブジェクトのルートセットから辿れるようになるので、ガーベッジコレクトへ回収されることはありません。

 本当はこの動作確認を簡単に行える方法があるといいのですが、JavaVMのモニタリングが必要そうなので、ちょっと難しそうです。

(簡単な解説を書いてみたけど、間違えていたら指摘してもらえると助かります)

カテゴリー: etc

static field

どこかで、Javaではstaticフィールドを持つクラスでもガーベッジコレクタに回収される可能性があるという話を聞いたことがあるのだが、リファレンスがみつからない。

一般的には自作クラスローダを使ってロードされたクラスにおいては、自作クラスローダがガーベッジコレクションに含まれて回収されると、staticフィールドを持ってるクラスでも自分をロードしたクラスローダと一緒に回収されてしまうらしい。これはある程度納得できる。

ある本には自己参照的な場合はstaticフィールドを持つクラスでも回収されるという説明があって、これはどうも納得がしにくい。そういう話だとstaticフィールドを持つクラスは実質的に使い物にならないという気がする。

真偽のほどを確認することができなかったので、この部分についての調査は断念して安全策でいくことにした。とりあえず、システムローダしか使わないアプリケーションでは問題がなさそうだ。

カテゴリー: Java

Renewal Web site

 ここ数日は、このサイトの構築をしているのですが、仕事でもWebサイトの移行をしています。仕事の方が気合をいれてやっているので、ちょっと懲りすぎてしまいました。単純なカスタマイズだけではすまなかったので、PHPコードも読みながらテーマを自作してみました。おかげさまで、WordPressはかなりカスタマイズできることがわかりました。ちょっと心配なのはバージョンアップのときに対応が少し大変かもしれないな、という点です。テーマファイルはかなり書き換えましたし、wp-includeにあるプログラムも若干修正しています。セキュリティ的な観点からいうと、こういうところはできるだけさわらないようにするか、本家へこういった関数で扱えるようにして欲しいという要望を投げるのが正しい姿だと思います。

 こういった苦労をしてみると、新しいWebサイトへ移行するのは面倒ですが、移行作業とともにデータをきれいにしたり、前は気づいていなかったことに気づけたりするので、やはりそれなりの価値はあるようです。また、年齢を重ねるとともに、新技術への興味が薄れてしまいがちなのですが、こういう作業をすると普及している技術についての自分のポジションを確認することができます。

 ということで、毎日はやりたくありませんが、半年に一回ぐらいは「まとめ」の意味も含めて、やってみるのが良さそうです。こうやって手に入れた技術を活かす機会に、いつかはめぐり合えると思いますし。

カテゴリー: etc

change theme

テーマをかえてみたのですが、謎な現象が発生することが判明して、もとに戻しました。入力したタグが消されて別のものに置き換わってしまうのです。PHPファイルをのぞいてみましたが、どこが変わっているのかさっぱりわからなかったので、あきらめました。少しずつ自分で改良していくのが近道になりそうです。

カテゴリー: etc

Comment

コメント欄でスパム対策をしていたのですが、テーマをかえたときに対応をするのを忘れていました。さっき直しました。といってもコメントをしてくれる人はあまりいないので、大きな影響はなかったと思います。

もう少しコメントしてもらえるような充実した内容にしていきたいところですが、時間が取れなくてなかなか難しいですね。とりあえずBlogのデザインについてもコードの表示がうまくできていませんから、そちらも対応する必要があって、そういったことに時間をどうしても取られてしまいます。

カテゴリー: etc

Data

データの変換プログラムを作成しているのですが、人が入力したデータなので、データの追加があるたびにエラーが発生して対応をするということを繰り返しています。件数も半端ではないので、なかなか大変…

カテゴリー: etc