<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Java</title><link>http://blogs.wankuma.com/kox/category/1293.aspx</link><description>Java</description><managingEditor>kox@wankuma.com</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>kox@wankuma.com</dc:creator><title>[java]入力チェック-日付の妥当性のみでは脆弱性あり</title><link>http://blogs.wankuma.com/kox/archive/2009/10/25/182417.aspx</link><pubDate>Sun, 25 Oct 2009 20:04:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2009/10/25/182417.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/182417.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2009/10/25/182417.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/182417.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/182417.aspx</trackback:ping><description>&lt;p&gt;最近、プロジェクトで発生した脆弱性関連の障害の話です。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;入力データのチェックにはvalidatorなどを使うのが定番ですが、&lt;/p&gt; &lt;p&gt;このプロジェクトでは使用していません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;その場合入力データに対して、&lt;/p&gt; &lt;p&gt;SimpleDateFormatクラスなどを使用して#setLenient(false)、#parse(入力データ)をするかと思います。&lt;/p&gt; &lt;p&gt;ネットでも、このように書かれているものが多いみたいですね。&lt;/p&gt; &lt;p&gt;しかし、#parse()って前方一致なのです。&lt;/p&gt; &lt;p&gt;つまり、&lt;/p&gt; &lt;p&gt;入力文字列が「2009/10/23は給料日」という文字列も通り抜けてしまいます。&lt;/p&gt; &lt;p&gt;この日付の後ろの文字列が、javascriptだったら・・・。&lt;/p&gt; &lt;p&gt;この文字列を日付のみと疑わずエスケープせずに出力してしまったら・・・。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いくつかの状況が重なってしまうと、脆弱性につながってしまうという事例でした。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/182417.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kox@wankuma.com</dc:creator><title>if条件判定はどちらがよい？ （その２）</title><link>http://blogs.wankuma.com/kox/archive/2008/02/15/123293.aspx</link><pubDate>Fri, 15 Feb 2008 18:03:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2008/02/15/123293.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/123293.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2008/02/15/123293.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/123293.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/123293.aspx</trackback:ping><description>&lt;P&gt;ネタ元：&lt;A href="http://blogs.wankuma.com/kox/archive/2007/07/12/84863.aspx"&gt;if条件判定はどちらがよい？（以前のブログエントリ（古い））&lt;BR&gt;&lt;/A&gt;　　　　：&lt;FONT face=Verdana size=2&gt;&lt;A href="http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&amp;amp;topic=43465&amp;amp;forum=12&amp;amp;start=136"&gt;文字列をequalsで判定する時&lt;/A&gt;(@IT)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;いままで、僕は以前のブログに書いてあるように、&lt;BR&gt;&lt;STRONG&gt;if(変数.equals("定数"))&lt;/STRONG&gt;&lt;BR&gt;のほうが、&lt;BR&gt;&lt;STRONG&gt;if("定数".equals(変数))&lt;BR&gt;&lt;/STRONG&gt;より保守の観点では優れていると思っていました。&lt;BR&gt;しかし、この考えが120度くらい変わってしまったので、&lt;BR&gt;再エントリをすることにしました。&lt;/P&gt;
&lt;P&gt;どちらのケースでも&lt;BR&gt;nullの対応がきちんと行われているのであれば、それほど問題となりません。&lt;BR&gt;しかし実際にはnullの考慮をし忘れて、不具合となるケースが少なくありません。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;以前までの僕は、以下のように考えていました。&lt;BR&gt;&lt;STRONG&gt;if(変数.equals("定数"))&lt;/STRONG&gt;&lt;BR&gt;を使用していれば、その箇所でNullPointerExceptionが発生するため安全です。&lt;BR&gt;&lt;STRONG&gt;if("定数".equals(変数))&lt;/STRONG&gt;&lt;BR&gt;を使用してしまうと、nullの場合に処理をしないだけなので、&lt;BR&gt;処理は正常に動作し、最悪の不具合の場合にはデータの破損や、&lt;BR&gt;不具合箇所の特定が困難になります。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;そして以下が考えを改めた理由です。&lt;BR&gt;単純に&lt;BR&gt;&lt;STRONG&gt;if(変数.equals("定数"))&lt;/STRONG&gt;と使用していれば、&lt;BR&gt;上記のようにバグはその時点でNullPointerExceptionが発生し問題ありません。&lt;BR&gt;しかし多くの場合は、&lt;BR&gt;&lt;STRONG&gt;if(&lt;FONT color=#0000ff&gt;変数!=null&lt;/FONT&gt; &amp;amp;&amp;amp; 変数.equals("定数"))&lt;BR&gt;&lt;/STRONG&gt;と書かかれています。&lt;BR&gt;まるで、枕詞のように頻繁に。&lt;BR&gt;であるならば、&lt;BR&gt;この書き方は、&lt;BR&gt;&lt;STRONG&gt;if("定数".equals(変数))&lt;/STRONG&gt;&lt;BR&gt;と等しく、以前までの僕が懸念してきたことは、&lt;BR&gt;まったく意味のないものとなってしまいます。&lt;/P&gt;
&lt;P&gt;どちらの場合でも同じような懸念が残ってしまうのです。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;意図的に&lt;BR&gt;「変数!=nullを使わないようにし、変数.equals("定数")のみで記述するようにすれば・・・」&lt;BR&gt;とも思いましたが、&lt;BR&gt;そもそも意図的に「変数!=nullを使わない」部分に気をつけるのであれば、&lt;BR&gt;「null時の対応を考慮し忘わすれない」部分に気をつけるべきなのだろうと考えました。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;if(変数.equals("定数"))&lt;/STRONG&gt;と&lt;BR&gt;&lt;STRONG&gt;if("定数".equals(変数))&lt;/STRONG&gt;を&lt;BR&gt;比較したとき、&lt;BR&gt;今までの考えと変わらず前者が安全だと思っています。&lt;BR&gt;しかし&lt;BR&gt;&lt;STRONG&gt;if(変数!=null &amp;amp;&amp;amp; 変数.equals("定数"))&lt;/STRONG&gt;と&lt;BR&gt;&lt;STRONG&gt;if("定数".equals(変数))&lt;/STRONG&gt;を&lt;BR&gt;比較したとき、&lt;BR&gt;後者のほうが分かりやすいと、僕は考えます。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;考えた末出した結論は、&lt;BR&gt;ケースバイケースで。&lt;BR&gt;・・・&lt;BR&gt;・・・&lt;BR&gt;結論になってないですね。&lt;/P&gt;
&lt;P&gt;どちらにしろ、この手の記述がある際には&lt;BR&gt;その状況などを考慮し注意する必要があるぞと、&lt;BR&gt;胸の奥にとどめておく程度でよいかと思います。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/123293.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kox@wankuma.com</dc:creator><title>ダウンロードファイル名の文字化け（実際にはServlet名になる）</title><link>http://blogs.wankuma.com/kox/archive/2008/01/10/116742.aspx</link><pubDate>Thu, 10 Jan 2008 11:25:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2008/01/10/116742.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/116742.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2008/01/10/116742.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/116742.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/116742.aspx</trackback:ping><description>&lt;P&gt;担当しているサイトのダウンロード機能のファイル名は文字化けが起こっていたのだが、&lt;BR&gt;IE7になり、いつの間にか解消されていた。&lt;/P&gt;
&lt;P&gt;ダウンロードファイル名の文字化け自体は、かなり有名な話で対応策などはそこら中サイトで見つけることができる。&lt;BR&gt;ちなみにファイル名は日本語ではない。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;この事象が発生していたのは、&lt;BR&gt;WindowsXP IE6 SP2がでて間もない頃の話。&lt;/P&gt;
&lt;P&gt;通常は、ファイル名を指定したい場合に&lt;BR&gt;　response.addHeader( "Content-Disposition", "attachment; filename=ファイル名 );&lt;BR&gt;とする。&lt;BR&gt;しかしこの対応策は取れなかった。&lt;BR&gt;&lt;A href="http://support.microsoft.com/kb/418126/ja?spid=2073&amp;sid=216"&gt;Content-Disposition: attachment でファイルをダウンロードするとフレームが更新されなくなる。&lt;/A&gt;&lt;BR&gt;この障害に見事にマッチし、回避策もとることはできなかった。&lt;BR&gt;エンドユーザの大半はまだIE6 SP2を使用しておらず、&lt;BR&gt;このエラーはランタイムエラーが発生してしまうため、使用するわけにはいかなかった。&lt;/P&gt;
&lt;P&gt;結果として&lt;BR&gt;　response.addHeader( "Content-Disposition", "inline; filename=ファイル名 );&lt;BR&gt;とすることにした。&lt;BR&gt;この場合、WindowsXP IE6 SP2 よりも前のバージョンであればファイル名を取得できるが、&lt;BR&gt;WindowsXP IE6 SP2以降はファイル名を取得できない。&lt;BR&gt;圧縮さえかかっていなければファイル名を取得できるのだが、&lt;BR&gt;データ量が大きかったため圧縮をかける必要があった。&lt;BR&gt;そのため、「まあ大きな害はないよね。」ということでこのまま運用することにした。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;あれから数年。&lt;BR&gt;IE7となり、気がつけばファイル名が取得されるようになっていた。&lt;BR&gt;めでたし、めでたし。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/116742.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kox@wankuma.com</dc:creator><title>バグの隠蔽化</title><link>http://blogs.wankuma.com/kox/archive/2007/10/02/99130.aspx</link><pubDate>Tue, 02 Oct 2007 16:42:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2007/10/02/99130.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/99130.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2007/10/02/99130.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/99130.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/99130.aspx</trackback:ping><description>&lt;PRE class=code&gt;
public class Hoge
{
  ...いろいろなメソッド
  public void バグのあるメソッド()
  {
    ...
    ...
    バグのコード
    ...
  }
}

public class Piyo extends Hoge
{
  public void バグのあるメソッド()
  {
    ...
    ...
    バグのコードをなおしたソース
    ...
  }
}
&lt;/PRE&gt;
&lt;P&gt;Hogeクラスは共通クラスです。&lt;BR&gt;Piyoクラスは、Hogeクラスを継承し、バグのメソッドのみ修正しています。&lt;BR&gt;Piyoクラスを使用することで、バグを回避し、Hogeクラスと同様の機能を使用することができます。&lt;BR&gt;ってバグ直せよ！&lt;/P&gt;
&lt;P&gt;というプログラムを見かけることがあります。&lt;BR&gt;Hogeクラスが修正できない状況なら分からなくもないのですが・・・ブツブツ&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/99130.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kox@wankuma.com</dc:creator><title>parseIntの挙動</title><link>http://blogs.wankuma.com/kox/archive/2007/08/23/91532.aspx</link><pubDate>Thu, 23 Aug 2007 11:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2007/08/23/91532.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/91532.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2007/08/23/91532.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/91532.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/91532.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://blogs.wankuma.com/nagise/archive/2007/08/01/88214.aspx"&gt;凪瀬さんの以前のエントリ&lt;/A&gt;で、&lt;BR&gt;自分もはまった事あったなと思いつつ、どんなんだったけ？と思っていました。&lt;BR&gt;それを先日思い出しましたので、備忘録として残しておこうかと思います。&lt;/P&gt;
&lt;P&gt;javaのInteger.parseInt()とjavascriptのparceInt()の8進数に関する挙動。&lt;BR&gt;java：&lt;/P&gt;&lt;PRE class=code&gt;  Integer.parceInt( "08" );      //8を返す。
  Integer.parceInt( "08", 10 );  //8を返す。
  Integer.parceInt( "08",  8 );  //NumberFormatExceptionを返す。
&lt;/PRE&gt;
&lt;P&gt;javascript：&lt;/P&gt;&lt;PRE class=code&gt;  parseInt( "08" );              //0を返す。
  parseInt( "08", 10 );          //8を返す。
  parseInt( "08", 8 );           //0を返す。
  parseInt( "8",  8 );           //NaNを返す。
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;javascriptでは計算処理をする場合に注意が必要。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/91532.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kox@wankuma.com</dc:creator><title>メール配信した内容とDB内容不一致の不具合事例</title><link>http://blogs.wankuma.com/kox/archive/2007/08/06/89000.aspx</link><pubDate>Mon, 06 Aug 2007 13:36:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2007/08/06/89000.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/89000.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2007/08/06/89000.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/89000.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/89000.aspx</trackback:ping><description>&lt;P&gt;仕様：&lt;BR&gt;顧客ごとに商品情報をDB更新し、各顧客に対して変更内容をメール配信する。&lt;/P&gt;
&lt;P&gt;ソース：&lt;BR&gt;List list = 顧客リスト;&lt;BR&gt;for( int i=0; i&amp;lt;list.size(); i++ ){&lt;BR&gt;&amp;nbsp; update( list.get(i) );&amp;nbsp;&amp;nbsp;&amp;nbsp; //顧客ごとに商品情報をDB更新&lt;BR&gt;&amp;nbsp; sendMail( list.get(i) );&amp;nbsp; //顧客ごとに更新した商品情報をメール配信&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;2件目以降のupdate処理中に、何かしらの理由でExceptionが発生し、&lt;BR&gt;トランザクションはrollbackされたが、既にメールは配信してしまっているため、データの不整合が発生。&lt;/P&gt;
&lt;P&gt;直接的な原因は、「何かしらの理由でExceptionが発生」したことにあります。&lt;BR&gt;そして、この障害を取り除けば、処理としては正常に流れます。&lt;/P&gt;
&lt;P&gt;しかし実装方法として適切かどうかというと疑問が残ります。&lt;BR&gt;このような実装をしているということは、&lt;BR&gt;おそらく、トランザクションの適用範囲が考慮されていません。&lt;BR&gt;そして、今後も似たような障害が発生するたびに、同じ状況が発生することになります。&lt;/P&gt;
&lt;P&gt;直接的な修正だけでは、根本解決にならないという事例ですね。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/89000.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kox@wankuma.com</dc:creator><title>if条件判定はどちらがよい？</title><link>http://blogs.wankuma.com/kox/archive/2007/07/12/84863.aspx</link><pubDate>Thu, 12 Jul 2007 12:48:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2007/07/12/84863.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/84863.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2007/07/12/84863.aspx#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/84863.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/84863.aspx</trackback:ping><description>&lt;PRE class=code&gt;if( 文字列定数.equals( 変数 ){
}
と
if( 変数.equals( 文字列定数 ){
}
&lt;/PRE&gt;
&lt;P&gt;書き方の違う２つの似たif文がありますが、&lt;BR&gt;どちらが保守に強い書き方なのでしょうか。&lt;/P&gt;
&lt;P&gt;２つの動作の大きな違いとして、&lt;BR&gt;前者はNullPointerExceptionは発生しないが、&lt;BR&gt;後者はNullPointerExceptionは発生する可能性があります。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;前者の場合は、変数にたとえNullが入っていたとしても、処理を継続します。&lt;BR&gt;実行時エラーは発生しません。（少なくともこの段階では））&lt;BR&gt;Nullの場合はそもそも意図した処理をする必要がないため、&lt;BR&gt;Nullであろうがなんだろうが気にしません。&lt;/P&gt;
&lt;P&gt;後者の場合は、変数にNullが入ってきた場合の処理を考える必要があります。&lt;BR&gt;NullPointerExceptionを投げられたら嫌ですもん。&lt;BR&gt;ですから、通常Nullである可能性がある場合は、&lt;BR&gt;&lt;PRE class=code&gt;if( 変数 != null &amp;&amp; 変数.equals( 文字列定数 ) ){
}
&lt;/PRE&gt;
&lt;P&gt;と言ったような書き方をします。&lt;/P&gt;
&lt;P&gt;上記のような書き方は、実はどちらもNullを考慮したつくりになっています。&lt;BR&gt;Nullが入ってくることを許容したつくりですね。&lt;BR&gt;その場合は確かに前者の方が優れているといえそうです。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;次にNullを許容していない場合を考えてみます。&lt;BR&gt;前者の場合は、Nullを許容してしまっているので、処理はされませんがエラーにもなりません。&lt;BR&gt;実行時エラーを出さないのも大切ですが、&lt;BR&gt;意図しない結果をエンドユーザに出力してしまうほうが問題です。&lt;BR&gt;エラーとならないので、最終的な処理結果が意図していたものと違うかどうかが分からず&lt;BR&gt;障害が発生した場合のエラー箇所の特定が困難になります。&lt;BR&gt;#まあ言ってしまえば前者自体がバグなのですが。&lt;BR&gt;後者の場合は、NullPointerExceptionを投げます。&lt;BR&gt;例外を投げるので、エラー箇所を特定することも容易です。&lt;BR&gt;ここより前の段階で何かしらの理由で変数にNullが含まれたことが明らかだからです。&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;結論として、どちらのif文を使用するかはケースバイケースと言うことになりますが、&lt;BR&gt;状況によりどちらのケースが適切であるかを考えるよりも&lt;BR&gt;Nullの許容有無に関わらず使用できる後者ほうが、保守に強いといえるかもしれません。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/84863.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kox@wankuma.com</dc:creator><title>LOG出力によるパフォーマンス遅延</title><link>http://blogs.wankuma.com/kox/archive/2007/07/03/83474.aspx</link><pubDate>Tue, 03 Jul 2007 11:58:00 GMT</pubDate><guid>http://blogs.wankuma.com/kox/archive/2007/07/03/83474.aspx</guid><wfw:comment>http://blogs.wankuma.com/kox/comments/83474.aspx</wfw:comment><comments>http://blogs.wankuma.com/kox/archive/2007/07/03/83474.aspx#Feedback</comments><slash:comments>88</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kox/comments/commentRss/83474.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kox/services/trackbacks/83474.aspx</trackback:ping><description>&lt;P&gt;ログの過度な出力はパフォーマンスに影響を与えるので注意が必要です。&lt;BR&gt;「そんなの当たり前だ」という声も聞こえてきそうですが、&lt;BR&gt;以下は結構見受けられる間違いです。&lt;/P&gt;
&lt;P&gt;Log4Jを使った例を示します。&lt;BR&gt;通常は本番用と開発用のログを分けるためにログレベルを設定します。&lt;BR&gt;そして開発用としてはdebugレベルを使用しますよね。&lt;/P&gt;&lt;PRE class="code"&gt;  logger.debug("Hello World");&lt;/PRE&gt;
&lt;P&gt;この程度の内容であれば、あまり問題視することもありませんが、&lt;/P&gt;&lt;PRE class="code"&gt;  List list = new ArrayList();&lt;BR&gt;  list.add();&lt;BR&gt;  ....（省略）&lt;BR&gt;  logger.debug(list.toString());&lt;/PRE&gt;
&lt;P&gt;としている場合があります。この場合、listの大きさによって大きな負荷が生じます。&lt;BR&gt;#debug()の引数になにを入れるかによって、その性能に差が生じてしまうということです。&lt;BR&gt;面倒ですが必ず&lt;/P&gt;&lt;PRE class="code"&gt;  if( logger.isDebugEnabled ){
    logger.debug(list.toString());
  }
&lt;/PRE&gt;
&lt;P&gt;とする必要があります。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kox/aggbug/83474.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>