Я имею библиотеку bean util и, конечно, кэширую Method
/Fields
свойств. Чтение и письмо проходят через отражение.
Существует идея пропустить отражение и для каждого метода/поля для байт-кода - генерировать простой объект, который непосредственно вызывает цель. Например, если у нас есть setFoo(String s)
, мы бы setFoo(String s)
метод set(String s)
этого сгенерированного класса, который внутренне вызывает setFoo()
. Опять же, мы заменяем вызов отражения с помощью прямого вызова.
Я знаю, что Java делает подобное с GeneratedMethodAccessor
. Но кеш может быть ограничен аргументом JVM.
Кто-нибудь знает, имеет ли смысл внедрять мою реализацию, учитывая производительность? С одной стороны, это звучит прекрасно, но с другой стороны, существует много новых классов, которые будут созданы - и заполняйте пространство gen.
Любой опыт на эту тему?
Вы пытаетесь повторно изобрести cglib FastMethod
Фактически, отражение вовсе не медленнее. См. qaru.site/questions/2133746/...
Отражение может выполнять более 50 000 000 вызовов в секунду. Это вряд ли будет узким местом.