现在开源框架,为了减少代码耦合度,一般用反射的方法来实现对类方法的查找等。但反射的效率究竟比直接取数据有多大差别。今天,做了个小实验。还请各位高手多多指教。直接来代码:

基本类:

  1. package test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class A {
  5. private int a ;
  6. private String b;
  7. private List c;
  8. public A(){
  9. this.a = 10;
  10. this.b = "abcde";
  11. c = new ArrayList();
  12. c.add("aaa");
  13. c.add("bbb");
  14. }
  15. public int getA() {
  16. return a++;
  17. }
  18. public void setA(int a) {
  19. this.a = a;
  20. }
  21. public String getB() {
  22. return b;
  23. }
  24. public void setB(String b) {
  25. this.b = b;
  26. }
  27. public List getC() {
  28. return c;
  29. }
  30. public void setC(List c) {
  31. this.c = c;
  32. }
  33. }

测试类:(引入beanUtil类)

  1. package test;
  2. import java.lang.reflect.InvocationTargetException;
  3. import org.apache.commons.beanutils.BeanUtils;
  4. public class testReflect {
  5. public static void main(String[] args){
  6. testReflect tr = new testReflect();
  7. tr.CommonTest();
  8. tr.ReflectTest();
  9. }
  10. public static void CommonTest(){
  11. A a = new A();
  12. long timeBegin = System.nanoTime();
  13. for(int i =0 ;i<100000;i++){
  14. a.getA();
  15. }
  16. long timeEnd = System.nanoTime();
  17. System.out.println((timeEnd - timeBegin)/1000
  18. );
  19. }
  20. public static void ReflectTest(){
  21. try {
  22. long timeBegin = System.nanoTime();
  23. for(int i =0 ;i<100000;i++){
  24. BeanUtils.getSimpleProperty(new A(), "a");
  25. }
  26. long timeEnd = System.nanoTime();
  27. System.out.println((timeEnd - timeBegin)/1000
  28. );
  29. } catch (IllegalAccessException e) {
  30. // TODO Auto-generated catch block
  31. e.printStackTrace();
  32. } catch (InvocationTargetException e) {
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. } catch (NoSuchMethodException e) {
  36. // TODO Auto-generated catch block
  37. e.printStackTrace();
  38. }
  39. }
  40. }

一比吓了一跳,效率大概是一百倍左右。怕是由于try块的开销大,本人又把27行注释掉。结论是影响效率的主要是

27行。看来,反射耗资源的说法还真不假。

转载于:https://blog.51cto.com/liubo/600257

java反射的效率有多高相关推荐

  1. java 反射的效率_如何提高使用Java反射的效率?

    前言 在我们平时的工作或者面试中,都会经常遇到"反射"这个知识点,通过"反射"我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另 ...

  2. 反射创建对象_面试题汇集——java反射

    反射是动态获取信息以及动态调用对象的方法,在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:并且对于任意一个对象,都能够调用它的任意一个方法. 1.除了使用new创建对象之外,还可以用 ...

  3. Java反射高频面试题(附答案)

    1.除了使用new创建对象之外,还可以用什么方法创建对象? 使用Java反射可以创建对象! 2.Java反射创建对象效率高还是通过new创建对象的效率高? 通过new创建对象的效率比较高.通过反射时, ...

  4. 大家都说 Java 反射效率低,为什么呢?

    我们在 Java 开发中,难免会接触到反射,而在一些框架中,反射的运用更是常见.我相信,每次提到反射,大家的第一反应一定是反射效率低,尽量少使用.但是反射的效率到底低多少?反射效率低的原因在哪里?这篇 ...

  5. 大家都说 Java 反射效率低,你知道原因在哪里么

    [这是 ZY 第 17 篇原创技术文章] 预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低的原因 文章概览 我们在 Java 开发中, ...

  6. dwr java有返回值但是js获取不到返回值_一探究竟:Java反射效率低的原因到底在哪?...

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低的原因 文章概览 我们在 Java 开发中,难免会接触到反射,而在一些框架中,反射的运 ...

  7. java 删除zip文件_Java--字节缓冲流的效率有多高?测试一下

    Java--字节缓冲流的效率有多高?测试一下 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 说缓冲流的效率特别高,那么今 ...

  8. java反射效率问题_Java反射到底慢在哪?

    原标题:Java反射到底慢在哪? 来自:简书,作者:张明云 链接:https://www.jianshu.com/p/4e2b49fa8ba1 反射具体是怎么影响性能的?这引起了我的反思.是啊,在阐述 ...

  9. java 反射效率分析

    前言 都说Java反射效率慢,个人也只是听说而已,到底慢在哪里? 又有多么慢? 今天就来分析下,此片博客与诸君共享,也当记录下自己的成果. 反射demo 设计 代码 new 和 class.newIn ...

最新文章

  1. c++Insertion Sort插入排序的实现算法(附完整源码)
  2. 大数据平台蓝图_数据科学面试蓝图
  3. java socket编程实现聊天程序_java Socket编程 聊天程序 服务器端和客户端
  4. WPF效果第一百七十八篇ItemsControl旋转
  5. Nginx基本数据结构之ngx_array_t
  6. socket 例子 java_java socket例子
  7. 超级弱口令检查工具使用简介
  8. 标签打印软件如何输出双面打印的文档
  9. 前端web设计师_Web设计师的时尚Web设计主题
  10. Every plan I should insist on !!
  11. oracle查询导致 gc等待,RAC等待事件:gc buffer busy acquire
  12. (10.1.6)极简主义
  13. Excel如何制作下拉列表
  14. sql server使用杂记(二)
  15. 这篇文章教给你图片怎么去雾的几个方法
  16. java中byte和short类型的相互转换(不是用隐式转换)
  17. vscode 最详细的调试
  18. Vue移动端开发IOS浏览器回退时页面不刷新或未正常发起请求
  19. 华为手环6鸿蒙,智能手环盘点:华为手环6比小米手环6贵在哪?
  20. CRectTracker(橡皮筋)类的使用

热门文章

  1. 看看 Grunt 的源码(一):grunt-cli 源码解析
  2. [关于SQL]查询成绩都大于80分的学生
  3. mssql,mysql,oracle中查询数据库表的比较
  4. 启动Tomcat报的各种菜鸟错误
  5. Citrix Xendesktop中VDA注册DDC的流程
  6. android 焦点的作用,Android中的视图焦点Focus的详细介绍
  7. orcle 删除表报正在使用_删除文件时提示正在使用无法删除?这款免费软件帮你快速解决问题...
  8. 云计算技术 — 混合云
  9. Windows 08R2_AD图文详解
  10. 180W多路输出式单片精密开关电源电路及分析