JAXB Непревзойденное улучшение производительности? - PullRequest
0 голосов
/ 06 февраля 2019

Итак, у меня есть настройка проекта, и я пытаюсь выполнить анализ JAXB.Я понимаю, что создание контекста - это то, что отнимает много времени, поэтому я создал экземпляр Singleton и использую его всякий раз, когда это необходимо.Поскольку unmarshaller не является потокобезопасным, я создаю его каждый раз, когда мне нужно что-то проанализировать.

Мой код для демаршаллинга выглядит так -

public static MyObj unmarshallThis(Node toParse) {
    Unmarshaller jUnmarsh = jaxbCntxt.createUnmarshaller();
    MyObj obj = (MyObj) jUnmarsh.unmarshall(toParse);
    return obj;
}

Код может содержать синтаксические ошибки, я набрал их через мобильныйИспользование машины, на которой я работаю, не вариант.:)

Теперь я добавил код, чтобы вычислить, сколько времени занимает этот фрагмент кода.Я заметил кое-что странное: когда я отменяю маршалинг первого XML, это занимает от 400 до 600 мсек, но когда я вызываю тот же метод для демаршаллинга другого другого XML (той же схемы), это занимает 30 мс или меньше, это происходит до перезапуска JVM,Первый unmarshall после перезапуска JVM всегда занимает в 10 раз больше времени, а весь последующий unmarshalling - в 10 раз меньше.

Теперь у меня возникает иллюзия повышения производительности после первого демаршалла, но я хотел бы знать, что вызывает повышение производительности?Действительно ли метод unmarshall () действительно что-то делает в первый раз, а затем повторно использует его для последующих unmarshalls?

Если я добавлю стандартный XML-код в метод init () или конструктор вместе с созданием контекста JAXB, тогдамои демоны будут быстрее?Я спрашиваю об этом, потому что мне нужно было бы реализовать это в WebApp, и я ищу все возможные способы повышения производительности.

Примечание: это будет небольшая часть в правительственном приложении, поэтому я не могуизменить вход (используя Node в настоящее время).Но если есть намного лучший способ сделать это, тогда дайте мне знать, я могу обсудить это с руководством, надеясь, что они как-то это поймут.Но сейчас мне просто любопытно, почему 1-й анмаршал занимает время, а остальные не делают.

...