在这种情况下如何节约内存使用?

08-03-06 hulty
近来在做一个模块,用的是一个如下的大概流程:
涉及的主要类:
Task 任务类--自定义
Container 存储的容器类--自定义
外部程序调用我做的模块接口传给我一个String字符串;我将这个字符串解析、封装成一个任务Task,然后将这个任务Task加入Container容器中。后台会启动多个线程去容器Container中搜索任务,然后将任务拿出来处理掉。

现在在实际应用中出现这样一个问题,即外部调用程序给我的任务很多很急,然后所有的任务Task都往容器Container中扔。后台从容器中检出任务并处理掉的线程来不及很快的处理完容器Container中已有的任务,结果导致Container中的东西越来越多,最后出现 OutOfMemory的问题。
各位大侠,如何处理这个问题啊,应该在什么地方加入什么机制来解决这个问题,希望大家多给我出几个主意。

wlmouse
2008-04-05 18:16
我觉得这应该就是个队列。你应该合理设置队列大小并在队列满的时候返回一个提示,告诉用户现在系统忙,让用户稍后提交。

banq
2008-04-07 10:16
需要扩充处理性能:将放入和拿出处理分两个服务器来实现。使用JMS这样带集群的处理架构

newthinker
2008-11-05 17:38
我觉得这样处理比较简单:
1,Task最好设计的很短小,在很短时间内处理完毕。
2,Task要能被持久化,Container一旦发现融入了太多Task,便把超出队列长度的剩余Task持久化。即便应用重启,Container也可以加载持久化上下文,并从中取出Task(回鲜过程)。
3,处理Task的线程(Work线程)可使用Concurrent包线程池管理。