2014-01-21 126 views
-2

我使用的tomcat servlet同时存储内容,因为它可用于servlet。单个请求可能需要存储1个或数千个(组件)。java管理多线程内存

为了处理并发性,我使用了一个固定大小的线程指针表。当一个组件可以被存储 - 存储对象被分配给表中的一个槽并开始执行。当线程完成时,该插槽为空,并根据需要分配另一个存储对象。如果使用表中的所有插槽,则会定期检查表中已完成的线程,并更换线程。

使用此模型管理内存可能很困难,因为垃圾收集永远不会完全清除踩死时使用的内存。这可能导致内存溢出或内存恢复过小。

有没有办法处理这种类型的GC - 例如,需要同步,然后是GC?是否有一个Java并发处理程序匹配这种类型的处理...

任何意见,将不胜感激。

感谢

+3

我没有得到你为什么必须完成处理单个请求后杀死线程。使用固定线程池,应用生产者/消费者模式,并重新使用线程。 – khachik

+2

“垃圾收集永远不会完全清理踩死时使用的内存。”你到底在说什么? – Kayaman

回答

0

我原本以为是GC的问题没有完全清理内存的是,我只看到轻微的GC收集仅做了部分清理。当主要收集发生时,它会冻结我们的服务长达10分钟。

在对不同的收集器进行了一些试验之后,它看起来像版本7下的新的G1收集器,可以做到这一点。

感谢那些研究过这些的人。