`
wj0573
  • 浏览: 8715 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java直接调用与反射

    博客分类:
  • java
阅读更多
代码参考:

package com.wj.test;

import java.lang.reflect.Method;

public class PerformanceTest {

 public static void main(String[] args) throws Exception {
  int testTime = 10;
  PerformanceTest test = new PerformanceTest();
  String msg = "this is test message";
  long bTime = System.nanoTime();
  for (int i = 0; i < testTime; i++) {
   test.takeAction(msg);
  }
  long eTime = System.nanoTime();
  System.out.println(eTime - bTime);

  Method method = test.getClass().getMethod("takeAction", String.class);

  bTime = System.nanoTime();
  for (int i = 0; i < testTime; i++) {
   method.invoke(test, msg);
  }
  eTime = System.nanoTime();
  System.out.println(eTime - bTime);

 }

 public int takeAction(String msg) {
  return (msg.length() * (int) (System.currentTimeMillis() % 100000));
 }

}

==========

打印:

5132 ns
166129 ns

 

总结:

在真实的开发场景,在系统发生一次调用过程中,发射的使用次数一般发生在个位数,发射影响的性能可以忽略不计。(利大于弊,反射创建的对象一般都缓存)

优化:要找准系统性能的瓶颈点。

考虑目前的计算机系统的速度,应用开发已经不在那么介意性能,而更为注重系统的可维护性和扩展性以及快速开发效率上。上述的测试结果是在一千万次的测试基础上产生的。而在通常的一次业务请求中,反射使用的次数应该是非常少的,只在框架级基础上被使用,在一个高负载的系统中,业务处理的性能将是关键点,而不在于使用的这些反射所带来的性能影响上。而使用反射所带来的开发便利与可维护性可扩展性的提升所带来的价值,是远远高于其所损耗的性能的。 

又回想起原来在某个所谓高性能项目中通过减少反射来提高性能的做法,现在想来,比较愚蠢。这说明前期的测试工作没到位,而带来这样的结论偏差,从而导致了开发与维护的不便,而且极大地影响了开发速度。 
其实那个系统的大部分性能瓶颈都是在数据库上,大部分的业务处理都是在数据库中进行的,在项目后面的性能测试中发现,WEB服务器的负载非常低,远远低于数据库,大部分的操作都是在等待数据库的返回。 
前期某些推论既没经过验证,也没相关的使用经验来支持此推论,是导致这种错误的根源。在将来的架构设计工作与框架型要加强这方面的评估工作,来达到性能与开发效率间的最佳平衡。

分享到:
评论

相关推荐

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    Java反射调用方法

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息,包括但不限于获取类的方法、字段、构造器等,并能动态调用方法和修改字段值。这个特性使得Java具有了更...

    groovy和Java相互调用1

    Java调用Groovy类则稍微复杂一些,通常有两种主要方法: 1. **方法1:直接调用** - 如果你的开发环境(如IntelliJ IDEA或Eclipse)已经安装了Groovy解释器插件,那么可以直接在Java代码中像调用Java类一样调用...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。这个能力使得开发者可以突破静态类型的束缚,实现一些在编译时期无法完成...

    Java 反射调用设置值

    Java 反射调用设置值

    Java反射调用工具类

    Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...

    java浏览器调用ie内核

    总结来说,Java调用IE内核主要涉及Java与ActiveX控件的交互,这一技术虽然有一定的历史背景,但在现代Web开发中已经较少使用,更多的现代解决方案倾向于使用标准Web技术或者基于Chromium的框架。理解和学习这个知识...

    java反射调用实例代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个资源“java反射调用实例代码”提供了关于如何使用Java反射API进行各种...

    java反射调用封装接口

    万能的反射封装接口,值得下载参考,当成util

    java动态调用方法

    Java动态调用方法是Java反射机制的一个重要应用,它允许我们在程序运行时,根据需要动态地获取类的信息并调用其方法。这种能力为代码的灵活性和可扩展性提供了强大的支持,尤其在处理不确定的对象类型或者需要在运行...

    java反射 java反射 java反射java反射

    - 性能优化:虽然反射灵活,但应谨慎使用,因为它比直接调用方法慢。 总之,Java反射机制为开发者提供了极大的灵活性,能够在运行时探索和操作类的内部细节,从而实现高度动态的程序设计。然而,过度使用反射可能...

    java反射调用

    java反射调用set方法时如果让参数做自动类型转换5 这段时间学习java的反射机制想实现一个功能:遍历一个Map,然后利用反射机制调用BO的set方法,完成BO属性的自动注入。这样设计的初衷是解决Excel数据导入问题中的...

    利用java反射调用实现对字符串的解析,成功调入函数,并且返回值

    在这个场景中,我们关注的是如何利用Java反射调用来解析字符串并执行相关函数,最终获取返回值。下面将详细阐述这个过程。 首先,`ReflectUtils.java` 文件可能包含了一些静态方法,这些方法提供了反射操作的便利...

    spring与java反射结合动态定义类及调用函数

    spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。

    Java反射方法调用

    Java反射机制是Java语言提供的一种强大的工具,它允许我们在运行时检查类、接口、字段和...在实际应用中,需要注意性能影响和安全问题,因为反射操作通常比直接调用方法要慢,并且可能会破坏封装性,增加代码的复杂度。

    Java应用程序和java Web调用Matlab配置实例

    在Java项目中,引入编译后的Java类,并通过Java的反射机制或者直接实例化对象来调用Matlab的方法。调用时,你需要传递相应的参数,并接收返回结果。注意,由于Matlab和Java的数据类型不同,你可能需要进行数据类型的...

    java 基于泛型与反射的通用 DAO

    在Java中,DAO通常负责与数据库的交互,包括CRUD(创建、读取、更新、删除)操作。 最后,“IBaseDao.java”可能是`BaseDao`的接口定义,它声明了一些通用的DAO操作,如`save`, `findById`等,以便于子类实现或继承...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    利用java反射调用Android隐藏Api

    利用java的反射原理来调用 Android隐藏api 应用开发必备哦 详细描述: http://blog.csdn.net/y_haiyang/article/details/9924925 ====================关注小鱼=================== 新浪微博:...

    java调用ffmpeg详细步骤

    使用Java语言调用终端开启关闭Nginx服务器,然后执行ffmpeg命令,开启转流推流。以及其它指令,来学习吧

Global site tag (gtag.js) - Google Analytics