我在MethodHandles.Lookup
经常使用课程的情况下工作。在这种情况下,保持MethodHandles.lookup()
多次查找之间的值是否明智?(具体来说,我使用的唯一查找方法是unreflect(java.lang.reflect.Method)
。)
这会加快速度,还是无关紧要?或者,它真的会因为某种原因减慢速度吗?
我在MethodHandles.Lookup
经常使用课程的情况下工作。在这种情况下,保持MethodHandles.lookup()
多次查找之间的值是否明智?(具体来说,我使用的唯一查找方法是unreflect(java.lang.reflect.Method)
。)
这会加快速度,还是无关紧要?或者,它真的会因为某种原因减慢速度吗?
与性能一样,唯一好的答案是测试,测量,再次测试,再次测量......
话虽这么说,是的,缓存可能会更快,问题是在您的上下文中它会明显更快。
缓存的缺点是内存使用和线程安全。MethodHandle 本身似乎是不可变的(没有明确记录,但查看合同,很可能是这种情况)。MethodHandles.Lookup 用于检查安全约束,因此缓存可能允许您绕过或至少更改有关安全约束的行为。这可能会或可能不会让您担心。
如果您缓存许多不同的 MethodHandle,那么内存使用就会发挥作用。您需要确保您的缓存有界和大小正确。我的猜测是你不会缓存很多不同的实例,但这只是一个猜测......