该程序用于读取文件,并将每一行作为 http 发送。文件中的每一行都是一个 url。
例如 http://localhost:8080/?a=1&b=2
PoolingClientConnectionManager pcm = new PoolingClientConnectionManager();
pcm.setMaxTotal(200);
pcm.setDefaultMaxPerRoute(20);
HttpClient client = new DefaultHttpClient(pcm);
ExecutorService executorService = Executors.newFixedThreadPool(10);
try (BufferedReader bfrDataSource = new BufferedReader(new FileReader(path))) {
while((line=bfrDataSource.readLine()) != null){
executorService.execute(new SendTask(line, client));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
executorService.shutdown();
client.getConnectionManager().shutdown();
发送任务.java
public class SendTask implements Runnable {
private String url;
private final HttpClient client;
public SendTask(String url, HttpClient client){
this.url = url;
this.client = client;
}
@Override
public void run() {
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse response = client.execute(httpGet);
response.getEntity().getContent().close();
} catch (ClientProtocolException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally{
httpGet.abort();
}
}
}
当我发送包含 500,000 行的文件时,它可以工作。但随后它发送了 100,000 行,发生了一个错误:java.lang.OutOfMemoryError:超出了 GC 开销限制。
- 如何修改程序以确保它可以发送至少 100 万行?谢谢你!