HttpServletResponse#getWriter()で取得したWriterにclose()を実行する必要があるか?

職場で話題になりました。ことのおこりは教育コーステキストのチェックをしていたときのこと。doGet(),doPost()すべてのコードの最後にout.close();の記述があったわけです。ただ、最近のメジャーなサーブレット本やらTomcatのサンプルコードなどをつらつら見てみると大体close()がない。で、どうしたわけじゃ。ということです。
講師仲間と小一時間と問い詰めた結果*1、一応以下の結論に達しました。

  • おそらく、close()を実行するのが出力ストリームのお約束であろう。お作法としてはclose()を書くのがお行儀がよいのではないか。
  • 昔は確かに意味はあった。
  • もちろん、アプリケーションからclose()を実行したとしても本当にcloseされるかは処理系依存
  • でも、最近は書かない方がポピュラー。書かないほうがパフォーマンス的に有利(とWebLogicの参考本には記述あり)

*1:いや、そんなに話はしていないのですが、使いたかったのよ、このフレーズ