如何在Java ThreadPoolExecutor任务中分配内存?

时间:2014-11-21 10:06:30

标签: java multithreading memory threadpoolexecutor

我有一份任务清单。每个任务消耗不同的内存量。 我可以非常粗略地预测特定任务的内存消耗,所以我不能依赖这样的预测。

例如:

  • 任务耗费200米至1克RAM,但平均耗时450米
  • 最大内存为2G(-Xmx2g)
  • 可用线程数为4。

因此,如果我只提交它们,我有几乎100%的机会OutOfMemmoryException。 如果我只使用2个或1个线程,我会失去性能。

我将在执行期间检查可运行任务中的可用空闲内存,如果没有足够的内存则终止它,并在稍后以较少的线程执行它们。但是当所有四个任务同时检测到低内存级别并终止它们时,可能存在竞争条件。所以我需要一种能够逐个逐出任务的主管。

无论如何这个解决方案看起来并不优雅,那么这种情况是否有最佳实践,或许某种方式可以控制任务提交率或其他任何方式?

0 个答案:

没有答案