java高性能反射工具_Java高性能反射工具包ReflectASM

本文通过测试对比,展示了如何使用Java高性能反射工具ReflectASM提高反射操作的性能。通过对比JDK反射与ReflectASM的`MethodAccess`、`FieldAccess`和`ConstructorAccess`的调用方法,强调了ReflectASM在定位方法、字段和构造器时的效率优势。
摘要由CSDN通过智能技术生成

packagecom.jts.test;importjava.lang.reflect.Method;importorg.junit.Test;importcom.esotericsoftware.reflectasm.ConstructorAccess;importcom.esotericsoftware.reflectasm.FieldAccess;importcom.esotericsoftware.reflectasm.MethodAccess;importcom.jts.service.UserService;public classAppTest {/*** JDK反射调用方法

*@throwsException*/@Testpublic void testJdkReflect() throwsException {

UserService userService= newUserService();long start =System.currentTimeMillis();

Method method= userService.getClass().getMethod("update", int.class, String.class);for (int i = 0; i < 100000000; i++) {

method.invoke(userService,1, "zhangsan");

}long end =System.currentTimeMillis();

System.out.println("timeout=" + (end - start));//809 753 880 875 816

}/*** ReflectAsm反射调用方法

* 用名称定位反射方法*/@Testpublic voidtestReflectAsm4Name() {

UserService userService= newUserService();

MethodAccess access= MethodAccess.get(UserService.class);//生成字节码的方式创建UserServiceMethodAccess

long start =System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {

access.invoke(userService,"update", 1, "zhangsan");

}long end =System.currentTimeMillis();

System.out.println("timeout=" + (end - start));//523 382 415 489 482

}/*** ReflectAsm反射调用方法

* 用方法和字段的索引定位反射方法,性能高*/@Testpublic voidtestReflectAsm4Index() {

UserService userService= newUserService();

MethodAccess access= MethodAccess.get(UserService.class);int index = access.getIndex("update", int.class, String.class);long start =System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {

access.invoke(userService, index,1, "zhangsan");

}long end =System.currentTimeMillis();

System.out.println("timeout=" + (end - start));//12 15 23 14 24

}/*** ReflectAsm反射来set/get字段值*/@Testpublic voidtestFieldAccess() {

UserService target= newUserService();

FieldAccess fieldAccess=FieldAccess.get(target.getClass());

fieldAccess.set(target,"state", 1);int state = (Integer)fieldAccess.get(target, "state");

System.out.println(state);

}/*** ReflectAsm反射来调用构造方法*/@Testpublic voidtestConstructorAccess() {

ConstructorAccess constructorAccess = ConstructorAccess.get(UserService.class);

UserService userService=constructorAccess.newInstance();

System.out.println(userService);

}/*** 查找方法的索引*/@Testpublic voidtestIndex() {

UserService target= newUserService();

MethodAccess methodAccess=MethodAccess.get(target.getClass());int index = methodAccess.getIndex("update", int.class, String.class);

System.out.println(index);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值