Является ли кэширование ссылок на методы хорошей идеей в Java 8?
Учтите, у меня есть код, подобный следующему:
class Foo {
Y func(X x) {...}
void doSomethingWithAFunc(Function<X,Y> f){...}
void hotFunction(){
doSomethingWithAFunc(this::func);
}
}
Предположим, чтоhotFunction
называется очень часто. Будет ли тогда целесообразно кэшироватьthis::func
может быть так:
class Foo {
Function<X,Y> f = this::func;
...
void hotFunction(){
doSomethingWithAFunc(f);
}
}
Насколько я понимаю ссылки на методы java, виртуальная машина создает объект анонимного класса при использовании ссылки на метод. Таким образом, кэширование ссылки создаст этот объект только один раз, в то время как первый подход создает его при каждом вызове функции. Это правильно?
Следует ли кэшировать ссылки на методы, которые появляются в горячих позициях в коде, или виртуальная машина способна оптимизировать это и сделать излишнее кэширование? Существует ли в этом передовой опыт или это очень специфично для реализации виртуальной машины, имеет ли смысл такое кэширование?