java中反射提供灵活性同时,给运行效率带来了一定影响。写个代码测试一下

package com.xzlf.reflectTest;

import java.lang.reflect.Method;

import com.xzlf.bean.User;

/**
* 反射、反射跳过安全检查、普通方法调用性能比较
* @author xzlf
*
*/
public class Demo04 {
// 普通方法调用
public static void test01() {
User u = new User();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000000L; i++) {
u.getName();
}
long end = System.currentTimeMillis();
System.out.println("普通方法调用,执行10亿次,耗时:" + (end - start) + "ms");
}
// 反射调用,不跳过安全检查
public static void test02() throws Exception {
User u = new User();
Class clz = u.getClass();
Method m = clz.getDeclaredMethod("getName", null); long start = System.currentTimeMillis();
for (int i = 0; i < 1000000000L; i++) {
m.invoke(u, null);
}
long end = System.currentTimeMillis();
System.out.println("反射动态方法调用,执行10亿次,耗时:" + (end - start) + "ms");
}
// 反射调用,跳过安全检查
public static void test03() throws Exception {
User u = new User();
Class clz = u.getClass();
Method m = clz.getDeclaredMethod("getName", null);
m.setAccessible(true);// 跳过安全检查
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000000L; i++) {
m.invoke(u, null);
}
long end = System.currentTimeMillis();
System.out.println("反射动态方法调用,跳过安全检查,执行10亿次,耗时:" + (end - start) + "ms");
} public static void main(String[] args) throws Exception {
test01();
test02();
test03();
} }

运行测试:

Java 反射调用方法 - 不跳过安全检查、跳过安全检查和普通方法性能比较测试的更多相关文章

  1. Java 反射 调用私有域和方法(setAccessible)

    Java 反射 调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了Acces ...

  2. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  3. 通过Java反射调用方法

    这是个测试用的例子,通过反射调用对象的方法.     TestRef.java import java.lang.reflect.Method; import java.lang.reflect.In ...

  4. JAVA反射调用方法

    1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotation.SetTable ...

  5. java反射调用某个对象的方法

    // 反射调用某个对象的方法 public Object invokeMethod(Object methodObject, String methodName, Object[] args) thr ...

  6. java反射获取类的类名、属性名、属性类型、方法、执行方法、构造函数

    public class Demo02 { @SuppressWarnings("all") public static void main(String[] args) thro ...

  7. Java 反射 调用私有构造方法

    单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...

  8. java黑魔法-反射机制-02-通过Java反射调用其他类方法

    package com.aaron.reflect; import java.lang.reflect.Method; import java.lang.reflect.InvocationTarge ...

  9. Java 反射调用的一种优化

    写一些Java框架的时候,经常需要通过反射get或者set某个bean的field,比较普通的做法是获取field后调用java.lang.reflect.Field.get(Object),但每次都 ...

随机推荐

  1. Jmeter接口测试之案例实战(十一)

    在前面的知识体系中详细的介绍了Jmeter测试工具在接口自动化测试中的基础知识,那么今天更新的文章主要是对昨晚的上课内容做个总结. 首先来看Jmeter测试工具在图片上传中的案例应用.首先结合互联网产 ...

  2. 自签SSL证书

    0.介绍 自己开发的使用了SSL协议的软件,通常没必要从证书签发机构那里来获取证书,自签证书成了必要的选择.自签证书还可以用来实现客户端登录认证. 1.创建CA 创建CA的私钥 openssl gen ...

  3. Ali_Cloud++:阿里云Centos配置iptables防火墙教程

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 1):检查iptab ...

  4. 史上最详细的Docker安装手册

    概述: 这个安装手册我已经使用了将近2年的时间,一直在进行完善(可以用于生产级别).使用了Centos 7系统. 一.Docker简单介绍 Docker是一个容器,使用的是Linux现有的技术,准确来 ...

  5. 关于laravel5.4.12新增集合操作when方法详解

    从v5.4.12开始,Laravel Collections现在包括一个when方法,允许您对项目执行条件操作,而不会中断链. 像所有其他Laravel 集合方法,这一个可以有很多用例,选择其中一个例 ...

  6. ANTLR随笔(三)

    ANTLR基本语法 前面已经简单介绍了ANTLR以及怎么安装和测试. 同学们应该大概清楚ANTLR的使用场景,但是对于关键步骤,怎么编写一个语法文件并没有详细介绍,这篇笔记主要详细讲解一下ANTLR的 ...

  7. (C++ Error: Incompatible types in assignment of ‘char*’ to ‘char [2])

    in C++, cannot assign a pointer to an array. c++中char*与char[]不是一种类型,但是在C里面可以,所以尽量使用C++中的类,如string, v ...

  8. 1051 Pop Sequence (25分)

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  9. SSM集合定时任务

    1.首先要在spring-config.xml里面配置一下: xmlns:task="http://www.springframework.org/schema/task" htt ...

  10. python 函数--闭包函数

    一.闭包函数: 在一个外函数中定义一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用. 二.实例: def outer(a): #外函数 b = 10 #临时变量 def i ...