考虑基本fixed
线程池:执行程序创建的线程池是否释放内存?
Executors.newFixedThreadPool(MaxListeners)
我打算不断提出新的任务 - 在响应传入TCP套接字服务请求。
但是,当每个任务的Runnable
代码完成时 - 他们消耗的内存是而不是发布?我看到不断增长的jvm内存使用情况。
该应用程序倾向于按组处理一组任务。我们可以看到楼梯内存使用模式:在每一组任务之后,内存都是几十兆字节。等待几十分钟(到几个小时)不会导致内存被回收。
所以两个问题:
- 是否有回收
Executors
线程池的存储器的手段不关闭池下 - 如果不是,那么如何才能长期运行的线程池使用现有的
java.util[.concurrent]
包进行设计?
问题可能与您的应用程序的实施方式有关。你没有尝试堆快照并分析它(使用JProfiler或YourKit)吗? – hunter
一旦执行完成,Runnables应该完全符合GC的条件。 (如果Runnable使用任何ThreadLocal存储,这是一个不同的故事。)尽管如此,GC很可能不会立即收集Runnable。 –
@hunter我花了很多时间与''jvisualvm'等jstat' – javadba