Сгенерированные объекты доступа с помощью байт-кода против GeneratedMethodAccessor

1

Я имею библиотеку bean util и, конечно, кэширую Method/Fields свойств. Чтение и письмо проходят через отражение.

Существует идея пропустить отражение и для каждого метода/поля для байт-кода - генерировать простой объект, который непосредственно вызывает цель. Например, если у нас есть setFoo(String s), мы бы setFoo(String s) метод set(String s) этого сгенерированного класса, который внутренне вызывает setFoo(). Опять же, мы заменяем вызов отражения с помощью прямого вызова.

Я знаю, что Java делает подобное с GeneratedMethodAccessor. Но кеш может быть ограничен аргументом JVM.

Кто-нибудь знает, имеет ли смысл внедрять мою реализацию, учитывая производительность? С одной стороны, это звучит прекрасно, но с другой стороны, существует много новых классов, которые будут созданы - и заполняйте пространство gen.

Любой опыт на эту тему?

Теги:
performance
bytecode

1 ответ

1
Лучший ответ

Вы пытаетесь повторно изобрести cglib FastMethod
Фактически, отражение вовсе не медленнее. См. qaru.site/questions/2133746/...

Отражение может выполнять более 50 000 000 вызовов в секунду. Это вряд ли будет узким местом.

  • 0
    Спасибо за ссылку. Мои тесты были с похожими результатами - без статистически значимой разницы. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню