Web サイトに接続して Web ページのタイトルを取得するプログラムを作成しました。プログラムに挿入できるテキストから URL を取得すると、すべての URL がリストに表示されます。速度を上げるために、複数のスレッドを使用します。たとえば、10 個のスレッドと 10 個の URL がある場合、プログラムは約 100 MB のメモリを使用します。しかし、5 つのスレッドと 10 の URL がある場合、各スレッドが 2 つの Web サイトに接続する必要があるため、メモリ使用量は最大で約 1.3 GB になります。私のプログラムが非常に多くのメモリを使用するのは、コード内の1行であることがわかりました。
in = new BufferedReader(new InputStreamReader(spoof.getInputStream()));
これはこの方法にあります:
private BufferedReader in;
private URL url;
private URLConnection spoof;
private void openConnection() {
try {
url = new URL(tag.url);
spoof = url.openConnection();
spoof.setRequestProperty("User-Agent", userAgent);
in = new BufferedReader(new InputStreamReader(spoof.getInputStream()));
} catch (IOException ex) {
tag.ableToConnect = false;
}
}
BufferedReader を閉じてマニュアルを実行しようとしましたSystem.gc()
。どちらもメモリ使用量には影響しません。
お役に立てれば幸いです。ありがとう!