返回字符串(fileName(的Java方法在内部消耗内存,用于无法进一步优化的少数映像操作,比如说每次方法执行消耗20 MB堆空间。
此方法作为ProcessingImageData的一部分执行,需要将文件名作为输出返回给RestWebService调用程序。
而一些n个线程是并行处理,这就产生了内存不足。
要逃离记忆堆空间,你能提供你的建议吗仅设置固定数量的线程来执行此方法。
public String deleteImageAndProvideFile(String inputImage, int deletePageNum){
// process image
//find page and delete
//merge pages to new file
// return new file Name
}
如果您有许多任务,但希望限制执行这些任务的线程数,请使用具有有界线程池的ExecutorService
。
Executors
类有一个用于创建所需内容的助手方法:
newFixedThreadPool(int nosThreads)
(javadoc(
根据要使用的内存量调整nosThreads
参数。
ExecutionService
文档解释了如何使用API(javadoc(。您提交任务并获得Future
对象,这些对象可用于等待给定任务完成。
在您的用例中,您的一个web请求可能会将任务提交给"全局"执行器服务,然后等待任务完成。或者,您可以设计您的系统,使处理与web请求异步完成;例如,在一个请求中提交一个任务,然后再提出另一个请求,看看它是否已经完成。