我编写了一个连接到网站并获取网页标题的程序。我从可以插入程序中的文本中获取 URL,然后所有 url 都在一个列表中。为了加快速度,我使用了多个线程。例如,如果我有 10 个线程和 10 个 URL,我的程序将使用大约 100 MB 内存。但是,如果我有 5 个线程和 10 个 URL,那么每个线程必须连接到两个网站,我的内存使用量会上升到大约 1.3 GB。我发现这是代码中的一行让我的程序使用了这么多内存:
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()
。两者都对内存使用没有影响。
如果你能帮助我,我会很高兴。谢谢!