Нужно решение для Java метода, который возвращает строковое значение для выполнения только n количество потоков в JVM - PullRequest
0 голосов
/ 17 апреля 2020

Java Метод, который возвращает строку (fileName), потребляет внутреннюю память для нескольких операций с изображениями, которые не могут быть дополнительно оптимизированы, скажем, занимает 20 МБ 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
}

1 Ответ

1 голос
/ 17 апреля 2020

Если у вас есть несколько задач, но вы хотите ограничить число выполняющих их потоков, используйте ExecutorService с ограниченным пулом потоков.

Класс Executors имеет вспомогательный метод для создания того, что вам нужно:

  • newFixedThreadPool(int nosThreads) ( javado c).

Настройте параметр nosThreads в соответствии с тем, сколько памяти вы хотите использовать.

В документации ExecutionService объясняется, как использовать API ( javado c ). Вы отправляете задачи и получаете Future объектов, которые можно использовать для ожидания завершения данной задачи.

В вашем случае один из ваших веб-запросов может отправить задачу в «глобальную» службу исполнителя и затем дождитесь завершения задачи. В качестве альтернативы вы можете спроектировать свою систему так, чтобы обработка выполнялась асинхронно с веб-запросами; например, отправьте задачу в одном запросе, а затем сделайте другой запрос, чтобы увидеть, было ли это выполнено.

...