返回 string(fileName) 的 Java 方法正在内部消耗一些无法进一步优化的图像操作的内存,假设每个方法执行消耗 20 MB HeapSpace。
此方法作为ProcessingImageData的一部分执行,需要将文件名作为输出返回给RestWebService调用者。
虽然某些 n 个线程正在并行处理,但会导致内存不足。
为了逃离OutofMemory-HeapSpace,您能否提供您的建议,例如 仅设置固定数量的线程来执行此方法。
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 请求异步完成;例如在一个请求中提交一项任务,然后发出另一个请求以查看该任务是否已完成。
关于java - 需要一个 Java 方法的解决方案,该方法返回一个字符串值,以便在 JVM 中仅执行 n 个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61269840/