O cache de referência do método é uma boa ideia no Java 8?
Considere que eu tenho um código como o seguinte:
class Foo {
Y func(X x) {...}
void doSomethingWithAFunc(Function<X,Y> f){...}
void hotFunction(){
doSomethingWithAFunc(this::func);
}
}
Suponha quehotFunction
é chamado com muita frequência. Seria aconselhável armazenar em cachethis::func
, talvez assim:
class Foo {
Function<X,Y> f = this::func;
...
void hotFunction(){
doSomethingWithAFunc(f);
}
}
No que diz respeito ao meu entendimento das referências ao método java, a Máquina Virtual cria um objeto de uma classe anônima quando uma referência ao método é usada. Portanto, o cache da referência criaria esse objeto apenas uma vez, enquanto a primeira abordagem o criaria em cada chamada de função. Isso está correto?
As referências de método que aparecem em posições quentes no código devem ser armazenadas em cache ou a VM consegue otimizar isso e tornar o cache supérfluo? Existe uma prática recomendada geral sobre isso ou essa implementação é altamente específica da VM, se esse cache é útil?