通过普通方式调用和反射方式调用以及关闭检测后,通过反射方式调用的性能对比

简介: 通过普通方式调用和反射方式调用以及关闭检测后,通过反射方式调用的性能对比

测试代码如下:

package Collections;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class text3 {
    //普通方式调用
    public static void text1() {
        person user = new person();
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {
            user.getName();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("普通方式执行10亿次;" + (endTime - startTime) + "ms");
    }
    //通过反射的方式调用
    public static void text2() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        person user = new person();
        Class c = user.getClass();
        Method getName = c.getDeclaredMethod("getName", null);
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {
            getName.invoke("person", null);
        }
        long endTime = System.currentTimeMillis();
        System.out.println("反射方式执行10亿次;" + (endTime - startTime) + "ms");
    }
    //关闭检测后,通过反射的方式调用
    public static void text3() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        person user = new person();
        Class c = user.getClass();
        Method getName = c.getDeclaredMethod("getName", null);
        getName.setAccessible(true);
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {
            getName.invoke("person", null);
        }
        long endTime = System.currentTimeMillis();
        System.out.println("关闭检测后,执行10亿次;" + (endTime - startTime) + "ms");
    }
    public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
        text1();
        text2();
        text3();
    }
}

输出:

普通方式执行10亿次;4ms
反射方式执行10亿次;6576ms
关闭检测后,执行10亿次;5577ms
相关文章
|
3月前
|
设计模式 Python
深度解密为什么实例在调用方法时会将自身传给 self 参数(二)
深度解密为什么实例在调用方法时会将自身传给 self 参数(二)
50 1
|
3月前
|
缓存 Python
深度解密为什么实例在调用方法时会将自身传给 self 参数(一)
深度解密为什么实例在调用方法时会将自身传给 self 参数
58 0
|
8月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
92 4
|
5月前
|
缓存 前端开发 Java
反射加缓存,解决不同的业务下调用不同的实现
反射加缓存,解决不同的业务下调用不同的实现
42 0
|
8月前
|
Java
多态如何影响接口方法的调用
多态如何影响接口方法的调用
42 2
|
8月前
|
定位技术 API C++
单例,函数的三种调用方式
单例,函数的三种调用方式
48 0
|
程序员 Scala 开发者
函数(方法)的调用机制|学习笔记
快速学习函数(方法)的调用机制。
120 0
函数(方法)的调用机制|学习笔记
|
Java
CheerpJ调用的两种方式
CheerpJ调用的两种方式
257 0
|
Java 开发者
反射调用普通方法|学习笔记
快速学习反射调用普通方法
124 0
反射调用普通方法|学习笔记
|
C# 索引
C#反射与特性(八):反射操作的示例大全
C#反射与特性(八):反射操作的示例大全
357 0

热门文章

最新文章