考虑到我的代码如下:
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 方法引用的理解而言,当使用方法引用时,Virtual Machine 会创建一个匿名类的对象。因此,缓存引用将只创建该对象一次,而第一种方法将在每个函数调用上创建该对象。是这样吗?
是应该缓存出现在代码热点位置的方法引用,还是 VM 能够优化这一点,使缓存变得多余?是否存在这方面的通用最佳实践,或者这种高度 VM 实现特定的缓存是否有用?