返回字符串(FileName)的Java方法在内部消耗内存用于一些无法进一步优化的图像操作,比方说每次方法执行消耗20MB HeapSpace。
此方法作为ProcessingImageData的一部分执行,需要将文件名作为输出返回给RestWebService调用者。
而一些n个线程是并行处理的,这提供了OutofMemory。
为了摆脱OutofMemory-HeapSpace,你可以提供你的建议,比如只设置固定数量的线程来执行这个方法。
public String deleteImageAndProvideFile(String inputImage, int deletePageNum){
// process image
//find page and delete
//merge pages to new file
// return new file Name
}发布于 2020-04-17 19:09:35
如果您有许多任务,但希望限制执行这些任务的线程数量,请使用具有有界线程池的ExecutorService。
Executors类有一个帮助器方法,用于创建所需的内容:
newFixedThreadPool(int nosThreads) (javadoc)。根据要使用的内存量调整nosThreads参数。
ExecutionService文档介绍了如何使用接口(javadoc)。您可以提交任务并获取Future对象,这些对象可用于等待给定任务完成。
在您的用例中,您的某个web请求可能会将任务提交给“全局”executor服务,然后等待任务完成。或者,您可以设计您的系统,使处理过程与web请求异步完成;例如,在一个请求中提交一个任务,然后发出另一个请求,看看它是否已经完成。
https://stackoverflow.com/questions/61269840
复制相似问题