Я посмотрел на инициализацию ObjectMapper
экземпляров и могу проверить описанное поведение:
StopWatch '': running time = 2323937394 ns
---------------------------------------------
ns % Task name
---------------------------------------------
2233845422 096 % map1
030696401 001 % map2
029092790 001 % map3
030302781 001 % map4
Кажется, причина в инициализации блоков stati c и полей-членов stati c ObjectMapper
экземпляр, который запускается только при первой загрузке класса.
Перед выполнением конструктора ObjectMapper
выполняется инициализатор com.fasterxml.jackson.databind.ObjectMapper.<clinit>()
stati c, который устанавливает все stati c поля экземпляра ObjectMapper
, такие как com.fasterxml.jackson.databind.cfg.BaseSettings.<clinit>()
et c.
После этого, когда конструктор ObjectMapper
запускается в первый раз, все поля stati c и stati Инициализируются c блоки его незаполненных c членов, например, com.fasterxml.jackson.core.JsonFactory.<clinit>()
, что занимает дополнительное время. Эти шаги инициализации stati c выполняются только при первом выполнении построения.