可以看出(请参见下面重写的测试用例),当由其工具编译和运行时,254 元方法的方法句柄在 Java 17 中占用的内存少于 Java 11 中的内存。
由于 Java 版本11到17的发行摘要中没有宣传与方法句柄或反射相关的功能,所以我很好奇:哪些变化有助于减少内存消耗?
这是一个重写的测试用例ArityLimits.java:
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Supplier;
class ArityLimits
{
public static void main(String[] args) throws Throwable
{
// Pick an implementation with the 1st argument, e.g. core.
final Invocable invocable = (args.length > 0
&& args[0].equalsIgnoreCase("core"))
? new CoreInvoker(ArityLimits::new)
: new HandleInvoker(ArityLimits::new,
MethodHandles.privateLookupIn( …Run Code Online (Sandbox Code Playgroud)