`

else if 与反射invoke性能比较测试(用于servlet判断调用方法)

    博客分类:
  • java
阅读更多

else if 与反射invoke性能比较测试(用于servlet判断调用方法),从测试结果看,只有几个方法的时候直接用if else if比较快,第一次使用invoke的时候花费的时间比较长,但之后基本上一致,比较平稳。在100个方法以后invoke方法比else少一个数量级别的时间,不过差别都是在纳秒范围内。

但采用invoke有一个明显的优势就是增加新的方法的时候不需要写判断语句的代码,直接添加方法就可以了,可以节省很长一段else if 代码的判断和维护。

 

两次运行结果:

 if method1用时:55147纳秒,0毫秒

 invoke method1用时:227628纳秒,0毫秒

 

 if method2用时:49518纳秒,0毫秒

 invoke method2用时:52185纳秒,0毫秒

 

 if method100用时:193578纳秒,0毫秒

 invoke method100用时:41914纳秒,0毫秒

 

 if method500用时:507870纳秒,0毫秒

 invoke method500用时:42386纳秒,0毫秒

 

 if method1000用时:496012纳秒,0毫秒

 invoke method1000用时:44326纳秒,0毫秒


 =====================================

 if method1用时:48170纳秒,0毫秒

 invoke method1用时:216665纳秒,0毫秒

 

 if method2用时:50090纳秒,0毫秒

 invoke method2用时:52676纳秒,0毫秒

 

 if method100用时:195969纳秒,0毫秒

 invoke method100用时:44236纳秒,0毫秒

 

 if method500用时:497615纳秒,0毫秒

 invoke method500用时:43714纳秒,0毫秒

 

 if method1000用时:494152纳秒,0毫秒

 invoke method1000用时:43538纳秒,0毫秒

=======================================

 

下面是测试代码:

 http://code.google.com/p/coos/source/browse/trunk/coos/src/com/coos/util/TestCase.java

 

下面是实现的servlet接口代码:

http://code.google.com/p/coos/source/browse/trunk/coos/src/com/coos/util/GetData.java

 

注:javaeye本身的语法着色js导致浏览器运行过慢弹出提示框,点击是就不显示我的代码了,所以用googlecode的代码功能!

分享到:
评论
5 楼 geweixin 2010-02-23  
hellojinjie 写道
guooscar 写道
switch 会更快一点

字符串不能用 switch 的啊

最近版本的sun jdk,switch已经支持字符串了。
4 楼 guooscar 2010-02-22  
zdz8207 写道
hellojinjie 写道
guooscar 写道
switch 会更快一点

字符串不能用 switch 的啊


javascript 里面switch可以用字符串,java里面只能用基本数据类型,无法满足servlet里面方法名的字符串判断。而且就算可以用字符串仍然每增加一个方法都要写一个case代码,仍然没有invoke扩展性好。

做个查找表,绕一绕还是可以的...
3 楼 zdz8207 2010-02-22  
hellojinjie 写道
guooscar 写道
switch 会更快一点

字符串不能用 switch 的啊


javascript 里面switch可以用字符串,java里面只能用基本数据类型,无法满足servlet里面方法名的字符串判断。而且就算可以用字符串仍然每增加一个方法都要写一个case代码,仍然没有invoke扩展性好。
2 楼 hellojinjie 2010-02-22  
guooscar 写道
switch 会更快一点

字符串不能用 switch 的啊
1 楼 guooscar 2010-02-22  
switch 会更快一点

相关推荐

    类的反射机制 常用的方法(简单明确)

    3. **调用方法**:通过`Class.getMethod()`或`Class.getDeclaredMethod()`获取方法对象,然后通过`Method.invoke()`方法来调用该方法。这支持调用实例方法、静态方法等。 4. **访问和修改字段**:同样地,可以通过`...

    java项目经理

    - `if`、`else`、`for`、`while`: 控制流程的关键字,用于逻辑判断和循环。 - **面向对象** - `class`: 定义类的关键字。 - `Object`、`Instance`: 对象和实例的概念,`Object` 是所有类的父类。 - `state` ...

    SpringMVC的代码简单实现

    元注解是在其他注解上使用的注解,而反射则是Java语言中的一种特性,允许程序在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法。 首先,我们需要理解SpringMVC的核心概念。它基于Model-View-...

    java必备的经典面试题

    - 使用`Method`类的`invoke()`方法,需要先通过反射获取`Method`对象。 #### 23. 如何将数值型字符转换为数字(Integer,Double)? - 可以使用`Integer.parseInt(String s)`和`Double.parseDouble(String s)`等...

    Java企业面试题整理及答案

    - **super()**: 是指父类构造器的引用,用于调用父类的构造方法或访问父类的成员。在子类构造器中使用 `super()` 可以调用父类的特定构造器,它必须是子类构造器的第一条语句。 - **this()**: 是指本类当前对象的...

    java3级考试资料

    - **方法的invoke()**:在运行时动态调用方法。 9. **注解(Annotation)**: - **预定义注解**:@Override、@Deprecated等的含义和作用。 - **自定义注解**:创建自定义注解并使用反射进行处理。 10. **Java ...

    将word文档嵌入到jsp页面的详细步骤

    在实际应用中,可以在Servlet或Action中调用此方法,例如: ```java String docFilePath = request.getSession().getServletContext().getRealPath("/") + "uploads/document/a.doc"; boolean success = ...

    Java 项目经验.pdf

    了解如何声明和使用变量、控制流程结构(if-else、for、while)、创建和调用方法、以及理解和使用类、对象和接口。 2. **异常处理**:Java中的异常分为编译时异常和运行时异常,理解这两种异常的区别至关重要。熟练...

    基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法

    接着,我们使用Proxy.newProxyInstance方法创建一个代理对象,用于拦截HttpServletRequest的getParameter方法,并将获取的参数值重新编码为UTF-8。 在CharacterEncodingFilter类中,我们使用了 InvocationHandler ...

    J2EE实验报告

    它可以用来拦截Action执行前后的方法调用,并且能够根据不同的需求进行定制化的逻辑处理,如验证用户输入、记录日志、事务管理等。 #### 二、实验环境 **2.1 MyEclipse** MyEclipse是一款集成开发环境(IDE),主要...

    自定义JSP分页标签

    - **真分页**与**假分页**:在实际应用中,通常有两种分页方式:真分页是指每次只查询当前页的数据,而假分页则是先查询所有数据再进行分页展示。显然,真分页在大数据量的情况下更有效率。 - **性能优化**:在实现...

    cms后台管理

    } else if (InvokeType.userDefined == type) { if (StringUtils.isBlank(listStyle)) { throw new ParamsRequiredException(PARAM_STYLE_LIST); } //列表样式模板路径 WEB-INF\t\cms_sys_defined\style_list\...

    使用拦截器解决中文乱码

    #### 步骤三:测试与验证 完成上述步骤后,我们需要测试自定义拦截器是否有效解决了中文乱码问题。可以通过向应用发送包含中文字符的请求,并检查响应结果来验证。 #### 总结 通过上述步骤,我们可以有效地利用...

    整理后java开发全套达内学习笔记(含练习)

    invoke vt.调用 [in'vәuk]' ( invocation [,invәu'keiʃәn]) Iterator [java] 迭代器, 迭代程序 legal 合法的 ['li:gәl] log n.日志,记录 [lɒg] native (关键字) ?? ['neitiv] nested [java] 嵌套的 ['...

    Java 中责任链模式实现的三种方式

    可以看到,Servlet 中的 FilterChain 是通过 Filter 配置类来管理 Filter 的,Filter 配置类中包含了 Filter 列表和 Servlet,达到在调用真正 Servlet 之前进行各种 Filter 逻辑。 Dubbo 中的 Filter Dubbo 中的...

    Struts2.0框架技术详解

    当表单中有多个提交按钮时,可以通过为每个按钮设置不同的name属性值,然后在Action中通过`getParameters()`方法获取提交按钮的名称来判断哪个按钮被点击。 **示例代码**: ```java public String execute() { ...

Global site tag (gtag.js) - Google Analytics