メモ: sun.net.www.protocol.jar.JarFileFactoryのキャッシュ
このコードの意図が分からず、調べたですよ。(「これは知識問題」等と思わせぶりなことを言われたので、つい気になって)
public static void setDefaultUseCaches() { try { new URL("http://example.com").openConnection().setDefaultUseCaches( false); } catch (Exception e) { } }
(出典)
JarFileFactory.javaがURLをキャッシュして消してくれないから、メモリリークしかねない。だからキャッシュを使わないように設定している。
…という話があるのですね。
JarFileFactory.javaを見ると、たしかにHashMapでURLをキャッシュしています。
しかし、消す機構がないかというとそうでもなく、closeというメソッドが存在します。closeメソッドにURLを渡すと、キャッシュをリムーブしてくれます。
openjdk-6-src-b20-21_jun_2010や、openjdk-7-ea-src-b130-18_feb_2011あたりのJarFileFactory.javaには、このメソッドがありますが、2006年頃のコードには、まだありません。
当時はcloseがなかったから、使えなかったのでしょうか?
もしcloseを使うとしたら、URLからブツをDLすることが主目的であるこの手のツールでは、キャッシュからURLをどのタイミングで消すのが、適切なのでしょうか?(そのへんは、よく分からないので、考えつつ読むカンジで。ハイ)
当該バグは、すでにClosedのようです。
JDK7ではURLConnectionにキャッシュのオン/オフをさせるようにするよ、といっているけど、どうなったのかな。