Оптимизация Saxon XQueryCompiler

Я обнаружил очень странное поведение XQueryCompiler в saxon 9.9.1-4. Когда я запускаю первый XQuery, компиляция занимает много времени (400 мс) независимо от сложности XQuery - проверено, например, math:pi(). Но когда я "инициализирую" компилятор XQuery путем компиляции чего-либо (например,compile.compile("1") ), тогда компиляция других запросов выполняется быстро - ожидания в 400 мс больше нет.

Это действительно странно, почему это происходит? Если такое поведение предусмотрено, то почему в фабричном методе Processor.newXQueryCompiler() нет такой инициализации?

Я протестировал флаг быстрой компиляции, и, похоже, он не влияет на эту задержку в 400 мс.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы измеряете стоимость загрузки виртуальной машины Java и программного обеспечения Saxon, а не стоимость компиляции фактического запроса. Java может занять некоторое время, чтобы «разогреться» до того, как все классы будут загружены, часто используемые методы компилируются JIT и так далее. Вы можете легко наблюдать этот эффект, если скомпилируете один и тот же запрос 20 раз, затрачиваемое время будет постепенно улучшаться по мере того, как Java выполняет свою оптимизацию.

Просто обратите внимание на других, читающих это - кажется, это прогрев Java VM, поскольку задержка, кажется, происходит только один раз и в начале процесса. Поэтому, если вам нужны быстрые запросы XQuery с самого начала, вы можете использовать трюк сcompile.compile("1") в фазе инициализации ;-)

kulatamicuda 12.07.2019 19:43

Другие вопросы по теме