起因
最近在看Flink中一个新feature:使用CodeGen来优化序列化器。
Flink中会根据用户定义的输入输出信息,生成相应的序列化器,这种定制化的序列化器比起Kryo性能要高很多,因为不用写类型信息等等。但是对于用户的POJO,序列化仍然是有些场景的瓶颈所在,因为不管这么定制,序列化器仍然需要通过反射来拿到对应字段。
那反射比起getXXX方法来说究竟慢在哪里呢?(这里特别说明对比的是反射中的Field/get)
测试
第一个例子:
public class Test {
public static void main(String[] args) throws Exception {
doGet();
doReflectGet();
}
public static void doGet() throws Exception {
long start = System.currentTimeMillis();
A a = new A();
for (int i = 0; i < 100000000; i++) {
a.getI();
}
System.out.println(System.currentTimeMillis() - start);
}
public static void doReflectGet() throws Exception {
long start = System.currentTimeMillis();
A a = new