メモ: 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にキャッシュのオン/オフをさせるようにするよ、といっているけど、どうなったのかな。