package kr.debop4j.core.reflect.benchmark; import kr.debop4j.core.reflect.MethodAccess; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import java.lang.reflect.Method; /** * kr.debop4j.core.reflect.benchmark.MethodAccessBenchmark * * @author 배성혁 ( sunghyouk.bae@gmail.com ) * @since 13. 1. 21 */ @Slf4j public class MethodAccessBenchmark extends Benchmark { @Test public void benchmarkMethodAccess() throws Exception { int count = 100_000; Object[] dontCompileMeAway = new Object[count]; MethodAccess access = MethodAccess.get(SomeClass.class); SomeClass someObject = new SomeClass(); int index = access.getIndex("getName"); Method method = SomeClass.class.getMethod("getName"); for (int i = 0; i < 100; i++) { for (int ii = 0; ii < count; ii++) dontCompileMeAway[ii] = access.invoke(someObject, index); for (int ii = 0; ii < count; ii++) dontCompileMeAway[ii] = method.invoke(someObject); } warmup = false; for (int i = 0; i < 100; i++) { start(); for (int ii = 0; ii < count; ii++) dontCompileMeAway[ii] = access.invoke(someObject, index); end("MethodAccess"); } for (int i = 0; i < 100; i++) { start(); for (int ii = 0; ii < count; ii++) dontCompileMeAway[ii] = method.invoke(someObject); end("Reflection"); } } static public class SomeClass { private String name = "something"; public String getName() { return name; } } }