Итак, я знаю, что эта тема уже была сделана, например, Java Reflection Performance , но мой конкретный вопрос заключается в том, что многие популярные библиотеки реализованы с помощью аннотаций и рефлексии (например, реализации Gson, Jackson, Jaxb, поиск в спящем режиме). Многие (если не все) библиотеки обеспечивают хорошую (или отличную) производительность, даже если они используют рефлексию. У меня вопрос, как они это делают? Есть ли какие-то «хитрости», которые нужно знать, или они просто используют прямое отражение, а проблемы с выступлениями преувеличены?
EDIT:
Так, например, когда мы пишем:
MyObject obj = new Gson (). FromJson (someInputStream, MyObject.class);
Я могу понять, как библиотека может внутренне кэшировать объекты Field, но мне кажется, что ей нужно каждый раз рефлексивно создавать экземпляр объекта и вызывать метод установки для каждого поля (рефлексивно) на основе проанализированного значения. из JSON.
Или есть какой-то способ оплатить (все) затраты на отражение только при запуске?
Я определенно заметил, что Gson / Jackson и т. Д. Имеют относительно большую стоимость запуска и после этого становятся очень быстрыми. Очевидно, мне интересно, если я напишу библиотеку, которая делает что-то неопределенно похожее, есть ли уловки, о которых мне нужно знать? Потому что, кажется, вы не можете избежать некоторого количества размышлений при каждом вызове.