java反射耗时测试案例解析
java反射相对与普通的对象调用原理上来说更加耗时,在调用次数较少的情况下可忽略性能损失,但当调用次数非常多时,需要考虑到此问题,即调用次数过多时不宜使用反射,以下举例:
package com.test.reflection; import java.lang.reflect.Method; public class ReflectionDemo { public static void main(String[] args) throws Exception { // 常规方式 Student student = new Student(); long startNormal = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { student.setName("hello"); } System.out.println("timeNormal=" + (System.currentTimeMillis() - startNormal)); //反射方式 Class<?> cla=Class.forName("com.test.reflection.Student"); long startReflection = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { Method method=cla.getDeclaredMethod("setName", String.class); method.invoke(cla.newInstance(), "hello"); } System.out.println("timeReflection=" + (System.currentTimeMillis() - startReflection)); } }
运行结果:
timeNormal=8 timeReflection=537
这是在简单使用反射调用某个方法的场景下1000000调用的性能差距。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
java获取反射机制的3种方法总结
反射机制的概念: 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制. 反射机制的应用: 生成动态代理,面向切片编程(在调用方法的前后各加栈帧). 反射机制的原理: 1 首先明确的概念: 一切皆对象----类也是对象. 2 然后知道类中的内容 :modifier constructor field method. 3 其次明白加载: 当Animal.class在硬盘中时
-
Java使用反射来获取泛型信息示例
本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: //获取Field对象f的类型 Class<?> a = f.getType(); 通过这种方式只对普通类型的Field有效.但如果该Field的类型是有泛型限制的类型,如Map<String , Integer>类型,则不能准确的得到该Field的泛型参数. 为了获得指定Field
-
Java使用反射调用方法示例
本文实例讲述了Java使用反射调用方法.分享给大家供大家参考,具体如下: 一 代码 import java.util.*; import java.io.*; import java.lang.reflect.*; public class ExtendedObjectPoolFactory { // 定义一个对象池,前面是对象名,后面是实际对象 private Map<String, Object> objectPool = new HashMap<>(); private Pr
-
Java注解与反射原理说明
一 点睛 注解若想发挥更大作用,还需借助反射机制之力.通过反射,可以取得一个方法上声明的注解的全部内容. 一般有两种需求: 1 取得方法中全部的注解,通过调用getAnnotations来实现. 2 判断操作是否是指定注解,通过调用getAnnotation来实现. 下面从源码角度来说明怎样获取这些注解信息. 二 源码导读--取得方法中全部的注解 public class AccessibleObject implements AnnotatedElement { ... //取得全部Annot
-
java常用工具类 Reflect反射工具类、String字符串工具类
本文实例为大家分享了java常用工具类的具体代码,供大家参考,具体内容如下 Reflect反射工具类 package com.jarvis.base.util; /** * * * @Title: ReflectHelper.java * @Package com.jarvis.base.util * @Description: 反射工具类 * @version V1.0 */ public class ReflectHelper { /** * 提指定的类载入以系统中 * * @param n
-
Java反射中java.beans包学习总结
之前一直以为PropertyEditor是SpringMVC提供的,今天才知道这个是jdk提供的,汗颜啊! 这个东西能干啥用呢?可以把字符串转成一个bean对象,spring mvc在把form表单映射到controller的入参对象就是利用的这个东西. 看一个例子: NodeDO.java:一个标准的javabean对象 public class NodeDO { private String name; private String email; private Date date; pub
-
Java利用反射如何查找使用指定注解的类详解
前言 最近有些空,想自己写个跟spring里的注解一样的注解来用,然后希望能找到使用了自己写了注解的类,下面来介绍一下实现方法 声明,下面代码是没看过spring源码写的,基本上都是网上找的博客,整理的 定义注解 Controller.java @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Controller { } RequestMapping.jav
-
Java使用反射创建对象示例
本文实例讲述了Java使用反射创建对象.分享给大家供大家参考,具体如下: 一 实战 1 代码 import java.util.*; import java.io.*; public class ObjectPoolFactory { // 定义一个对象池,前面是对象名,后面是实际对象 private Map<String ,Object> objectPool = new HashMap<>(); // 定义一个创建对象的方法, // 该方法只要传入一个字符串类名,程序可以根据该
-
java反射耗时测试案例解析
java反射相对与普通的对象调用原理上来说更加耗时,在调用次数较少的情况下可忽略性能损失,但当调用次数非常多时,需要考虑到此问题,即调用次数过多时不宜使用反射,以下举例: package com.test.reflection; import java.lang.reflect.Method; public class ReflectionDemo { public static void main(String[] args) throws Exception { // 常规方式 Studen
-
Java反射 PropertyDescriptor类案例详解
JAVA中反射机制(JavaBean的内省与BeanUtils库) 内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set(
-
java操作elasticsearch的案例解析
这篇文章主要介绍了java操作elasticsearch的案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 到目前为止,我们一直都是使用RESTful风格的 API操作elasticsearch服务,但是通过我们之前的学习知道,elasticsearch提供了很多语言的客户端用于操作elasticsearch服务,例如:java.python..net.JavaScript.PHP等.而我们此次就学习如何使用java语言来操作elasti
-
Java对象创建内存案例解析
Java对象创建内存图解析 1. 栈 Java栈的区域很小 , 特点是存取的速度特别快,栈存储的特点是, 先进后出,存储速度快的原因: 栈内存, 通过 栈指针'来创建空间与释放空间,指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存.这种方式速度特别快 , 仅次于PC寄存器,但是这种移动的方式, 必须要明确移动的大小与范围 ,明确大小与范围是为了方便指针的移动 , 这是一个对于数据存储的限制, 存储的数据大小是固定的 , 影响了程序的灵活性. 所以我们把更大部分的数据 存储到了堆内存中
-
Java FutureTask类使用案例解析
FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提空 start cancel 操作,可以查询计算是否已经完成,并且可以获取计算的结果.结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那么计算就不能再次启动或是取消. 一个FutureTask 可以用来包装一个 Callable 或是一个runnable对象.因为FurtureTask实现了Runnable方法,所以一个 FutureTask可以提交(submit
-
Java反射通过Getter方法获取对象VO的属性值过程解析
这篇文章主要介绍了Java反射通过Getter方法获取对象VO的属性值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 有时候,需要动态获取对象的属性值. 比如,给你一个List,要你遍历这个List的对象的属性,而这个List里的对象并不固定.比如,这次User,下次可能是Company. e.g. 这次我需要做一个Excel导出的工具类,导出的批量数据是以List类型传入的,List里的对象自然每次都不同,这取决于需要导出什么信息.
-
Java反射技术详解及实例解析
前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替代了,java反射有个开源框架jOOR相信很多人都用过,不过我们还是要学习反射的基础语法,这样才能自己写出优秀的框架,当然这里所讲的反射技术,是学习Android插件化技术.Hook技术等必不可少的! 一.基本反射技术 1.1 根据一个字符串得到一个类 getClass方法 String nam
-
java反射获取一个object属性值代码解析
有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: private class User { String userName; String userPassword; public String getUserName() { return userName; } public void setUserName(String userName) { this.
-
java继承的概念及案例解析
这篇文章主要介绍了java继承的概念及案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 package java09; //定义一个员工类 public class Employee { public void method(){ System.out.println("方法执行!!!"); } } package java09; //定义一个教师类 public class Teacher extends Employee {
-
深入解析Java反射之基础篇
目录 前言 一.回顾:什么是反射? 二.反射的主要用途 三.反射的基本运用 1.获得 Class 对象 2.判断是否为某个类的实例 3.创建实例 4.获取方法 5.获取构造器信息 6.获取类的成员变量(字段)信息 7.调用方法 8.利用反射创建数组 四.反射的一些注意事项 前言 因为本人最近正筹备Samsara框架的开发,而其中的IOC部分非常依靠反射,因此趁这个机会来总结一下关于Java反射的一些知识.本篇为基本篇,基于JDK 1.8. 一.回顾:什么是反射? 反射 (Reflection)
随机推荐
- 读懂正则表达式就这么简单
- 使用XQuery查询DB2 XML数据
- JS控制div跳转到指定的位置的几种解决方案总结
- asp循环语句总结
- Bootstrap框架实现广告轮播效果
- 配置Chrome支持本地(file协议)的AJAX请求
- cwRsync提示password file must be owned by root when running as root的解决方法
- C语言数据结构树的双亲表示法实例详解
- 关于访问IIS元数据库失败的解决方法
- FCKeditor 實戰技巧
- 渗透技术一瞥(图)
- C#自定义日志记录
- java 中String.equals和==的比较
- 关于C++为什么不加入垃圾回收机制解析
- struts2的国际化实现网站整体中英文切换实例代码
- c#同步两个子目录文件示例分享 两个文件夹同步
- Android PopupWindow实现右侧、左侧和底部弹出菜单
- 解析Android中View转换为Bitmap及getDrawingCache=null的解决方法
- 浅谈Android invalidate 分析
- 从0到1搭建element后台框架优化篇(打包优化)