Skip to content

Instantly share code, notes, and snippets.

Created Sep 27, 2020
What would you like to do?
package jdk.jmh;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
@Warmup(iterations = 5, time = 1)
@Measurement(iterations = 5, time = 2)
public class ProxyBench {
Interfaze implClass, implProxy;
int a, b, c;
public void setup() {
implClass = new Clazz();
implProxy = (Interfaze) Proxy.newProxyInstance(
new Class<?>[]{Interfaze.class},
new IHandler()
ThreadLocalRandom tlr = ThreadLocalRandom.current();
a = tlr.nextInt();
b = tlr.nextInt();
c = tlr.nextInt();
public int implClass() {
return implClass.sum(a, b, c);
public int implProxy() {
return implProxy.sum(a, b, c);
public interface Interfaze {
default int sum(int a, int b, int c) {
return a + b + c;
static class Clazz implements Interfaze {
public int sum(int a, int b, int c) {
return Interfaze.super.sum(a, b, c);
static class IHandler implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return Proxy.invokeDefaultMethod(proxy, method, args);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment