Как минимизировать время загрузки JavaVM при вызове jar из Python?

Я использую JAR-файл Google Closure Compiler, чтобы свести к минимуму рабочие JS-файлы, отражающие изменения, сделанные моими клиентами. Каждый раз, когда пользователь нажимает «Опубликовать изменения» на задней панели, он создает системный вызов файла компилятора.jar, но каждый такой вызов занимает 4-6 секунд, независимо от размера файла JS. После исследования я обнаружил, что большая часть задержки связана с загрузкой JavaVM для каждого вызова. Система - Ubuntu и Python.

Как я могу поддерживать постоянную работу JavaVM и загружать файлcompile.jar каждый раз, когда пользователь нажимает «Опубликовать»?

Код Python:

import subprocess
jarjs = os.path.join(ROOT_DIR, "compiler.jar")
fn_output = fn_source.replace('.js','.min.js')
p = subprocess.Popen(['java','-jar',jarjs,'--jscomp_off','internetExplorerChecks','--compilation_level','SIMPLE_OPTIMIZATIONS','--js',fn_source,'--js_output_file',fn_output], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = p.communicate()

более полный код


person oriadam    schedule 21.05.2016    source источник


Ответы (1)


Существует несколько общих решений для Java, которые поддерживают загрузку процессов, в том числе:

http://www.martiansoftware.com/nailgun/

и

https://github.com/ninjudd/drip

Обновление, сентябрь 2018 г.: теперь также можно создать компилятор закрытия с помощью инструмента Graal native-image. Это обеспечивает удивительно быстрый запуск, но более низкую пиковую производительность. Для всего, что встроено в версию JVM до 30, это, вероятно, хороший компромисс.

person John    schedule 22.05.2016