package kr.debop4j.core.reflect.benchmark;
import kr.debop4j.core.reflect.FieldAccess;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.lang.reflect.Field;
/**
* kr.debop4j.core.reflect.benchmark.FieldAccessBenchmark
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 13. 1. 21
*/
@Slf4j
public class FieldAccessBenchmark extends Benchmark {
@Test
public void benchmarkFieldAccess() throws Exception {
int count = 1000000;
Object[] dontCompileMeAway = new Object[count];
FieldAccess access = FieldAccess.get(SomeClass.class);
SomeClass someObject = new SomeClass();
int index = access.getIndex("name");
Field field = SomeClass.class.getField("name");
for (int i = 0; i < 100; i++) {
for (int ii = 0; ii < count; ii++) {
access.set(someObject, index, "first");
dontCompileMeAway[ii] = access.get(someObject, index);
}
for (int ii = 0; ii < count; ii++) {
field.set(someObject, "first");
dontCompileMeAway[ii] = field.get(someObject);
}
}
warmup = false;
for (int i = 0; i < 100; i++) {
start();
for (int ii = 0; ii < count; ii++) {
access.set(someObject, index, "first");
dontCompileMeAway[ii] = access.get(someObject, index);
}
end("FieldAccess");
}
for (int i = 0; i < 100; i++) {
start();
for (int ii = 0; ii < count; ii++) {
field.set(someObject, "first");
dontCompileMeAway[ii] = field.get(someObject);
}
end("Reflection");
}
}
static public class SomeClass {
public String name;
}
}