假设我有如下代码:
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方法引用的理解而言,当使用方法引用时,虚拟机会创建一个匿名类的对象。因此,缓存引用将只创建该对象一次,而第一种方法在每次函数调用时创建该对象。这是正确的吗?
是否应该缓存出现在代码中热门位置的方法引用,或者VM是否能够优化这一点并使缓存变得多余?有没有关于这方面的一般最佳实践,或者这种高度的VM实现是否特定于这种缓存是否有用?
https://stackoverflow.com/questions/23983832
复制相似问题