zoukankan      html  css  js  c++  java
  • 反射效率问题及提高

    package com.zby;
    
    import java.lang.reflect.Method;
    
    public class TestBase64 {
        private static final int INVOKE_TIME=1000000000;
        public static void test01() {
            User user = new User();
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < INVOKE_TIME; i++) {
                user.getName();//直接通过对象调用getName方法
            }
            long endTime = System.currentTimeMillis();
            System.out.println("普通方法调用,执行10亿次,耗时:" + (endTime - startTime) + "ms");
        }
    
        public static void test02() throws Exception {
            User user = new User();
            Class<User> clazz = User.class;
            Method method = clazz.getDeclaredMethod("getName");
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < INVOKE_TIME; i++) {
                method.invoke(user);//通过反射调用getName方法
            }
    
            long endTime = System.currentTimeMillis();
            System.out.println("反射动态方法调用,执行10亿次,耗时:" + (endTime - startTime) + "ms");
        }
    
        public static void test03() throws Exception {
            User user = new User();
            Class<User> clazz = User.class;
            Method method = clazz.getDeclaredMethod("getName");
            method.setAccessible(true); // 不需要执行访问安全检查
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < INVOKE_TIME; i++) {
                method.invoke(user);//通过反射调用getName方法
            }
            long endTime = System.currentTimeMillis();
            System.out.println("反射动态方法调用,跳过安全检查,执行10亿次,耗时:" + (endTime - startTime) + "ms");
        }
    
        public static void main(String[] args) throws Exception {
            test01();
            test02();
            test03();
        }
    }
    
    class User {
        private String name="zby";
        public String getName() {
            return name;
        }
    }
    普通方法调用,执行10亿次,耗时:4ms
    反射动态方法调用,执行10亿次,耗时:157881ms
    反射动态方法调用,跳过安全检查,执行10亿次,耗时:992ms
  • 相关阅读:
    第3关:求三位数各位数字的和
    第4关:求三角形的面积
    第6关:输出杨辉三角
    最短路 模板 【bellman-ford,dijkstra,floyd-warshall】
    hdu 1874 畅通工程 【spfa and dijkstra实现】
    01背包问题 总结关于为什么01背包优化成1维数组后,内层循环是逆序的?
    Stein算法求最大公约数
    hdu 1576 A/B 【扩展欧几里德】
    树状数组之 ——区间更新,单点查询;区间更新,区间查询;
    差分数组
  • 原文地址:https://www.cnblogs.com/zby9527/p/7662343.html
Copyright © 2011-2022 走看看