Является ли использование процесса-строителя в Java разумным обходным путем для обработки PDF с тяжелой памятью? [закрытJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Является ли использование процесса-строителя в Java разумным обходным путем для обработки PDF с тяжелой памятью? [закрыт

Сообщение Anonymous »

Я работаю над проектом Spring Boot, где я использую стороннюю библиотеку PDF (например, Spire.pdf). Тем не менее, я заметил, что память, используемая во время обработки PDF, не выпускается быстро, и это постепенно вызывает давление памяти в приложении. Я связался с поставщиком, но в настоящее время нет никакого исправления или оптимизации на их конце. Как только файл обрабатывается, подпроцесс выходит и выпускает память. Поскольку наши требования к производительности не являются строгими, это, кажется, работает локально. Считается ли этот шаблон (подразделяя новые подпроцессы Java для задач с тяжелыми ресурсами) приемлемым или рекомендуемым в реальных приложениях?@PostMapping("pdfReplace")
public void pdfReplace(HttpServletResponse response) throws Exception {
List files = FileUtil.loopFiles("/path/to/pdfs");
ObjectMapper objectMapper = new ObjectMapper();

for (File file : files) {
PdfReplaceParam param = new PdfReplaceParam();
param.setFilePath(file.getAbsolutePath());
param.setReplaceMap(Map.of("replaceBefore", "xxxx", "test", "xx"));

File tempJson = File.createTempFile("pdf_param_", ".json");
objectMapper.writeValue(tempJson, param);

String classPath = System.getProperty("java.class.path");
ProcessBuilder pb = new ProcessBuilder(
"java", "-cp", classPath, "com.example.PdfReplaceWorker", tempJson.getAbsolutePath()
);
pb.inheritIO();

Process process = pb.start();
int exitCode = process.waitFor();
if (exitCode != 0) {
log.error("Error processing file: {}", file.getName());
}

tempJson.delete();
}
}
< /code>

Рабочий класс (подпроцесс): < /p>
public class PdfReplaceWorker {
public static void main(String[] args) throws IOException {
if (args.length < 1) {
System.err.println("No JSON file path provided");
System.exit(1);
}

File jsonFile = new File(args[0]);
ObjectMapper objectMapper = new ObjectMapper();
PdfReplaceParam param = objectMapper.readValue(jsonFile, PdfReplaceParam.class);

PdfDocument doc = new PdfDocument();
try {
doc.loadFromFile(param.getFilePath());

PdfTextReplaceOptions options = new PdfTextReplaceOptions();
options.setReplaceType(EnumSet.of(ReplaceActionType.IgnoreCase, ReplaceActionType.WholeWord));

for (int i = 0; i < doc.getPages().getCount(); i++) {
PdfPageBase page = doc.getPages().get(i);
PdfTextReplacer replacer = new PdfTextReplacer(page);
replacer.setOptions(options);
param.getReplaceMap().forEach(replacer::replaceText);
}

doc.saveToFile(param.getFilePath());
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(2);
} finally {
doc.dispose();
}
}
}
< /code>

Что я делаю: < /p>

В моем контроллере Spring Boot я использую процесс создания для запуска нового процесса Java. < /li>
Подпрограммирует обработки обработки и IT -обработки. Память восстанавливает. /> Существуют ли риски в новом появлении новых JVM в серверной среде?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... vy-pdf-pro
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Может ли void* быть разумным (лучше) в функциях, работающих с необработанной памятью разных размеров? [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Может ли void* быть разумным (лучше) в функциях, работающих с необработанной памятью разных размеров? [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить ошибку OOM при выполнении тяжелой обработки в Python?
    Гость » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Гость
  • Java Get PID от процесса -строителя
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Java Get PID от процесса -строителя
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»