私のプログラムでは、必要に応じて一度に切断するために、いくつかのHTTPサーバーに対して開いている接続のリストを追跡する必要があります。ArrayListからURLConnectionオブジェクトを削除する<URLConnection>
私は以下の問題に直面しました。 HTTPサーバーに接続するとすべて正常に動作しますが、HTTPSの場合は接続がリストから削除されません。メモリリークを引き起こします。
例:URL指す場合
package test;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
try {
ArrayList<URLConnection> al = new ArrayList<URLConnection>();
URL url = new URL("http://www.example.com");
URLConnection conn = url.openConnection();
al.add(conn);
System.out.println("Result of removing = " + al.remove(conn));
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
}
"http://www.example.com" し、 "=真除去した結果" へ。
しかし、URLが "https://www.example.com"の場合は、 "削除の結果= false"となります。
私はそのような動作を理解していません。私はいくつかの前提を持っていますが、わかりません...
誰かが助けることができますか?
だから、それは本当に_equalsの奇妙な行動の場合である_...私はおかげで...、そのような説明を離れて送りました!ところで、あなたはそのような_equals_振る舞いを持つクラスの他の例を知りませんか? –
いいえ、確かに私はこのことも知らなかった。今度思い出すことができる* equalals *の唯一の事例は、java.net.URLのものです(この場合の欠陥は整合性に関するものです:等価関係はDNS解決に依存するため、2つのURLインスタンスがそうでないかもしれません)。解決されたIPアドレスに応じて等しくなりますが、これは別の話です)。 – Javier
今はすべてがクリアです。ありがとう! –