3

我在MethodHandles.Lookup经常使用课程的情况下工作。在这种情况下,保持MethodHandles.lookup()多次查找之间的值是否明智?(具体来说,我使用的唯一查找方法是unreflect(java.lang.reflect.Method)。)

这会加快速度,还是无关紧要?或者,它真的会因为某种原因减慢速度吗?

4

1 回答 1

2

与性能一样,唯一好的答案是测试,测量,再次测试,再次测量......

话虽这么说,是的,缓存可能会更快,问题是在您的上下文中它会明显更快。

缓存的缺点是内存使用和线程安全。MethodHandle 本身似乎是不可变的(没有明确记录,但查看合同,很可能是这种情况)。MethodHandles.Lookup 用于检查安全约束,因此缓存可能允许您绕过或至少更改有关安全约束的行为。这可能会或可能不会让您担心。

如果您缓存许多不同的 MethodHandle,那么内存使用就会发挥作用。您需要确保您的缓存有界和大小正确。我的猜测是你不会缓存很多不同的实例,但这只是一个猜测......

于 2014-09-18T21:08:09.210 回答