更新时间: 2023-06-11 05:55:49#httpasyncclient 引起的内存泄漏问题 List<HttpUriRequest> cache = new ArrayList<HttpUriRequest>(n); for (int i = 0; i < n; i++) { HttpGet request = new HttpGet("http://www.baidu.com?a="+i); cache.add(request); } HttpAsyncClient httpClient = new HttpAsyncClient(); int i = 0; while (true){ final HttpUriRequest request = cache.get(i%cache.size()); httpClient.execute(request, new FutureCallback<HttpResponse>() { public void completed(final HttpResponse response) { System.out.println(request.getRequestLine() + "->" + response.getStatusLine()); } public void failed(final Exception ex) { System.out.println(request.getRequestLine() + "->" + ex); } public void cancelled() { System.out.println(request.getRequestLine() + " cancelled"); } }); i++; Thread.sleep(100); } FutureCallback 类会被不断的创建,而在内部这个callback 是连接到httpget上,而httpget是个list cache 没释放。大量的回调类晋升到了old区,最终导致 Full GC 产生。 https://zhuanlan.zhihu.com/p/212778161