我正在使用一个tomcat servlet,它同时存储内容,因为它可用于servlet。单个请求可能需要存储1个或数千个(组件)。
为了处理并发性,我使用了一个固定大小的线程指针表。当一个组件可以存储时 - 存储对象被分配到表中的一个槽并开始执行。当线程完成时,插槽为NULL,并根据需要分配另一个存储对象。如果使用了表中的所有插槽,则会定期检查表以查找已完成的线程并更换线程。
使用此模型管理内存可能很困难,因为垃圾收集永远不会完全清除踏板在死亡时使用的内存。这可能导致内存溢出或内存恢复过小。
有没有办法处理这种类型的GC - 例如GC之后需要同步吗?是否存在匹配此类处理的java并发处理程序...
任何建议都将不胜感激。
由于
答案 0 :(得分:0)
我最初认为GC中的一个问题并不是完全清理内存,因为我只看到了一些只进行部分清理的小型GC收集。当主要收集确实发生时,它会冻结我们的服务长达10分钟。
在对不同的收藏家进行一些实验之后,它看起来就像版本7下的新G1收藏家一样。
感谢那些研究过这个的人。