package jdk.test; import org.openjdk.jmh.annotations.*; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; @BenchmarkMode(Mode.AverageTime) @Warmup(iterations = 5) @Measurement(iterations = 10) @OutputTimeUnit(TimeUnit.NANOSECONDS) @Fork(1) @State(Scope.Thread) public class ProxyBench { /* jdk-8u66: Benchmark Mode Cnt Score Error Units ProxyBench.getProxyClass1i avgt 10 24.316 ± 0.213 ns/op ProxyBench.getProxyClass4i avgt 10 90.730 ± 2.249 ns/op ProxyBench.newProxyInstance1i avgt 10 44.642 ± 0.403 ns/op ProxyBench.newProxyInstance4i avgt 10 381.764 ± 2.328 ns/op jdk-9-ea+109: Benchmark Mode Cnt Score Error Units ProxyBench.getProxyClass1i avgt 10 27.748 ± 0.333 ns/op ProxyBench.getProxyClass4i avgt 10 87.939 ± 1.809 ns/op ProxyBench.newProxyInstance1i avgt 10 58.348 ± 0.911 ns/op ProxyBench.newProxyInstance4i avgt 10 432.913 ± 9.915 ns/op jdk-9-dev: Benchmark Mode Cnt Score Error Units ProxyBench.getProxyClass1i avgt 10 1153.255 ± 11.710 ns/op ProxyBench.getProxyClass4i avgt 10 6062.040 ± 250.677 ns/op ProxyBench.newProxyInstance1i avgt 10 1547.119 ± 40.836 ns/op ProxyBench.newProxyInstance4i avgt 10 6386.511 ± 119.570 ns/op jdk-9-dev + patch: Benchmark Mode Cnt Score Error Units ProxyBench.getProxyClass1i avgt 10 7.765 ± 0.019 ns/op ProxyBench.getProxyClass4i avgt 10 64.194 ± 1.670 ns/op ProxyBench.newProxyInstance1i avgt 10 13.337 ± 0.334 ns/op ProxyBench.newProxyInstance4i avgt 10 67.073 ± 1.005 ns/op */ interface PkgPrivate1 { void m1(); } interface PkgPrivate2 { void m2(); } static final InvocationHandler handler = (proxy, method, args) -> null; static final ClassLoader loader1 = null; static final Class[] interfaces1 = {Runnable.class}; static final ClassLoader loader4 = PkgPrivate1.class.getClassLoader(); static final Class[] interfaces4 = {Runnable.class, Callable.class, PkgPrivate1.class, PkgPrivate2.class}; @Benchmark public Class getProxyClass1i() { return Proxy.getProxyClass(loader1, interfaces1); } @Benchmark public Class getProxyClass4i() { return Proxy.getProxyClass(loader4, interfaces4); } @Benchmark public Object newProxyInstance1i() { return Proxy.newProxyInstance(loader1, interfaces1, handler); } @Benchmark public Object newProxyInstance4i() { return Proxy.newProxyInstance(loader4, interfaces4, handler); } }