Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

フィルタのdestroy()メソッドのついて

こんにちは、
質問があります。
フィルタのオーバーライド必須の3つのメソッドについて、
質問があります。

Private FilterConfig config = null;
init()でまず
  this.config = null;
そして
doFilter(〜)
〜〜〜
そして
destroy()といくわけですが、
このdestroy()のなかで、よく見かけるのが、
メソッドの中に何も書かないパターンです。
個人的には
this.config = nullをしたほうが、早くガーベージコレクションの対象とされて、動作が少しでも速くなるのではと思ったりするのですが、どうなんでしょうか。
また、同じフィルタをかけているページ数の多さとかも関係あるのでしょうか。
わかりにくい質問とは思いますが、初心者としては、理解しておきたいところですのでよろしくおねがいします。

3

回答

5326

閲覧

3件の回答

評価

0

基本的に明示的null代入をすると、逆にパフォーマンスは劣化するようです。
http://www-06.ibm.com/jp/developerworks/java/040312/j_j-jtp01274.html
> 多くの場合、これは全くガベージコクレタの助けにはなっておらず、
> 実際にはプログラムのパフォーマンスを損ねる場合さえある

評価

0

まず、フィルタの動作そのものを誤解しているような気がします。
フィルタは、要求があるたびにその3つのメソッドを呼ぶわけではありません。
毎回のリクエストでは、doFilter()しか呼ばれません。
destroy()が呼ばれるのは破棄される直前だけなので、この時点でガベージコレクションのことを考えても、あんまり意味がありません。

いずれにせよ、ガベージコレクションはシステムの気まぐれ(ちょっと違うけど)で起こるものなので、それを意識した作りは、なるべくしないほうが良いでしょう。
これさんのリンク先にもありますが、System.gc()を発行したところで、必ずガベージコレクションが起こるとは限りません。

評価

0

これさん
mioさん
有難うございます。
明らかにフィルタを誤解してました。
>毎回のリクエストでは、doFilter()しか呼ばれません。

>destroy()が呼ばれるのは破棄される直前だけなので、この時点
>でガベージコレクションのことを考えても、あんまり意味があり>ません。

だいぶ理解できました。

>基本的に明示的null代入をすると、逆にパフォーマンスは劣化す>るようです。

destroy()には何も書かないようにします。
私のレベルでやっている範疇なら、パフォーマンスの差は体感できる物ではなかったのですが、大規模になれば、、、
今のうちに知っといて良かったと思います。

有難うございます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。