java管理多线程的内存

时间:2014-01-21 16:46:43

标签: java multithreading garbage-collection

我正在使用一个tomcat servlet,它同时存储内容,因为它可用于servlet。单个请求可能需要存储1个或数千个(组件)。

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

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

有没有办法处理这种类型的GC - 例如GC之后需要同步吗?是否存在匹配此类处理的java并发处理程序...

任何建议都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

我最初认为GC中的一个问题并不是完全清理内存,因为我只看到了一些只进行部分清理的小型GC收集。当主要收集确实发生时,它会冻结我们的服务长达10分钟。

在对不同的收藏家进行一些实验之后,它看起来就像版本7下的新G1收藏家一样。

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