Java JAX-RS客户端:KeepAliveCache中有许多实例

Java JAX-RS客户端:KeepAliveCache中有许多实例,java,rest,jersey,jax-rs,cxf,Java,Rest,Jersey,Jax Rs,Cxf,我正在运行一个Java微服务,使用JAX RSclient类的Apache CXF实现发出许多REST客户机请求。在重复10个并发请求的同时,我在sun.net.www.http.KeepAliveCache中看到350多个映射项消耗了大量堆内存。这是我想释放的记忆 在这个例子中,我一直在向同一个主机(目标)发出相同的请求,我不明白为什么缓存中会保留这么多条目。大概10个还不够吗?我也无法弄清楚连接/客户端实例/如何。。。可以重复使用 在我的代码中,我只创建了客户机类的一个实例。然后与clien

我正在运行一个Java微服务,使用JAX RS
client
类的Apache CXF实现发出许多REST客户机请求。在重复10个并发请求的同时,我在
sun.net.www.http.KeepAliveCache
中看到350多个映射项消耗了大量堆内存。这是我想释放的记忆

在这个例子中,我一直在向同一个主机(目标)发出相同的请求,我不明白为什么缓存中会保留这么多条目。大概10个还不够吗?我也无法弄清楚连接/客户端实例/如何。。。可以重复使用

在我的代码中,我只创建了
客户机
类的一个实例。然后与
client.target(…).request().get()一起使用

我很乐意得到一些关于如何在CXF中使用连接管理器的提示——假设这有助于解决我的问题

作为旁注,大量CPU时间花费在
SSLSocketImpl.startHandshake
中。如果可以避免这种情况(它一直都是同一个主机!),我也很乐意得到一些提示

编辑:在从中读取实体后不久,我使用try finally关闭
响应
对象。但是,我从不关闭
客户端
实例

编辑2:重新使用相同的
客户端
实例不是一个好主意,因为Apache CXF不提供线程安全的实现。由于我没有看到性能下降,所以每当我需要一个实例时,我都会创建一个新的
客户端。不过,这与本文概述的问题无关

编辑3:与Jersey客户端相同的问题