closeメソッドが追加された背景については、「Closing a URLClassLoader」 に説明があります。
説明を解釈すると、次のようになります。
JavaアプリケーションがクラスおよびURLClassLoaderオブジェクトへの参照がなくなった後に、ガーベジコレクションおよびファイナライゼーションにより、URLClassLoaderオブジェクトが掴んでいたjarファイルがクローズされます。jarファイルがクローズされた後に、jarファイルを置き換えて再度URLClassLoaderオブジェクトを生成すれば、最新のクラスをロードし直せるようになります。ということのようです。
ところが、jarファイルがクローズされるタイミングというのは、ガーベジコレクションとファイナライゼーションの実行タイミングに依存する、つまり予測できないわけです。特にWindowsではクローズされていないファイルを削除することができないため、jarファイルを置き換えるタイミングが難しいという問題があります。(Linuxでも同じ気がするが…)
そこでJava SE 7では、URLClassLoaderにcloseメソッドを追加し、明示的にjarファイルをクローズできるようにした…
ここで注意したいのは、APIリファレンスに説明があるのですが、URLClassLoaderオブジェクトが一度ロードしたクラスはcloseメソッドを呼んでも継続して当該クラスを取得可能ですが、まだロードされていないクラスはcloseメソッドを呼ぶとロードされなくなるという点です。
うーん、今まで問題なく動作していたJavaアプリケーションにcloseメソッドを呼ぶ処理を追加したら、ClassNotFoundExceptionがスローされる可能性が出てくるわけですよね?
URLClassLoader.close()の使いどころが、工夫次第でなかなか難しい気がするのですがが、皆さんはどう考えるでしょうか?