Кэширование результата MethodHandles.lookup()?
Я работаю в ситуации, когда MethodHandles.Lookup
класс используется часто. В этой ситуации целесообразно сохранить ценность MethodHandles.lookup()
между несколькими поисками? (В частности, единственный метод поиска, который я использую, это unreflect(java.lang.reflect.Method)
.)
Это ускорит что-нибудь, или это не будет иметь значения? Или это действительно замедлит это по какой-то причине?
1 ответ
Как всегда в случае с производительностью, единственный хороший ответ - проверить, измерить, проверить снова, измерить снова...
При этом, да, кеширование, вероятно, будет быстрее, вопрос в том, будет ли он значительно быстрее в вашем контексте.
Недостатком кэширования является использование памяти и безопасность потоков. Кажется, что сам MethodHandle неизменен (явно не задокументирован, но, глядя на контракт, это, скорее всего, так). MethodHandles.Lookup используется для проверки ограничений безопасности, поэтому кэширование может позволить вам обойти или, по крайней мере, изменить поведение в отношении ограничений безопасности. Это может или не может беспокоить вас.
Использование памяти вступает в игру, если вы кешируете много разных MethodHandle. Вы должны убедиться, что ваш кеш ограничен и имеет правильный размер. Я предполагаю, что вы не будете кэшировать много разных экземпляров, но это только предположение...