`
nwangwei
  • 浏览: 24066 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

对Web中的Action使用反射与否影响不大

    博客分类:
  • Java
阅读更多
感觉反射调用对整个Web过程来说可以忽略不计哦,虽然和直接调用相差还是蛮大的

我机器(945主板、Celeron D 3.06、1G内存、XP系统)的测试结果:
不添加干扰方法
:797
:109

添加了干扰方法后

:812
:120


大家可以做下测试,代码如下
package example;

import java.lang.reflect.Method;

public class Methoder {

	public static void main(String[] args) throws Exception {
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; ++i) {
			p1();
		}
		System.out.println(":" + (System.currentTimeMillis() - start));
		start = System.currentTimeMillis();
		for (int i = 0; i < 100000; ++i) {
			p2();
		}
		System.out.println(":" + (System.currentTimeMillis() - start));
	}

	public static void p1() throws Exception {
		Test t = new Test();
		Class c = t.getClass();
		Method m = c.getMethod("sayHello", new Class[0]);
		m.invoke(t, new Object[0]);
	}

	public static void p2() throws Exception {
		Test t = new Test();
		t.sayHello();
	}

}

class Test {
	public void sayHello() {
		//		System.out.println("Test:");
		int l = 0;
		for (int i = 0; i < 1000; ++i) {
			l += i;
		}
	}

	// 以下方法为干扰用,但是两种调用方法都时间延长了点
	public void sayHello1() {
	}

	public void sayHello2() {
	}

	public void sayHello3() {
	}

	public void sayHello4() {
	}

	public void sayHello5() {
	}

	public void sayHello6() {
	}

	public void sayHello7() {
	}

	public void sayHello8() {
	}

	public void sayHello9() {
	}

	public void sayHello10() {
	}

	public void sayHello11() {
	}

	public void sayHello12() {
	}

	public void sayHello13() {
	}

	public void sayHello14() {
	}

	public void sayHello15() {
	}

	public void sayHello16() {
	}

	public void sayHello17() {
	}

	public void sayHello18() {
	}

	public void sayHello19() {
	}

	public void sayHello20() {
	}

	public void sayHello21() {
	}

	public void sayHello22() {
	}

	public void sayHello23() {
	}

	public void sayHello24() {
	}

	public void sayHello25() {
	}

	public void sayHello26() {
	}

	public void sayHello27() {
	}

	public void sayHello28() {
	}

	public void sayHello29() {
	}

	public void sayHello30() {
	}

}
分享到:
评论
4 楼 MonkeyLin 2008-06-19  
nwangwei 写道
我设想的是这样一种情况
针对 http://localhost/admin/index
我指向 AdminAction的index 方法,那么index方法就要通过反射来调用了

这种反射造成的开销完全可以忽略不计。
瓶颈绝不会在这里,只会在IO、网络吞吐、数据库存取之类的地方。
3 楼 nwangwei 2008-06-19  
我设想的是这样一种情况
针对 http://localhost/admin/index
我指向 AdminAction的index 方法,那么index方法就要通过反射来调用了
2 楼 fight_bird 2008-06-19  
这样的测试不严谨,过于简单化了,考虑以下两者情况:
1、类构造函数和运行方法中加入不同数据量的引用类型参数再进行对比
2、Method.invoke()、t.hello()各自抛出一定数量的异常
结果会不同,Sun官方结论是基于反射的执行效率约为实例调用的1/2。
1 楼 springoflove 2008-06-19  
CPU: Dual E2180 2.00Ghz
测试的时候别的软件占用CPU 16%左右

Jdk:1.4.2

:937
:266
Jdk:1.6.0.05
:438
:140
这跟jdk的版本有很大关系的,jdk1.5以后性能提高很多。

相关推荐

    在web.xml中配置action或.do

    ### 在web.xml中配置action或.do的理解与实践 #### 一、引言 在Web开发领域,特别是基于Java的Web应用程序开发中,`web.xml`文件扮演着至关重要的角色。它不仅定义了Web应用的基本配置,还管理着诸如Servlet、过滤...

    Web Performance in Action

    Web Performance in Action: Building Faster Web Pages by Jeremy Wagner English | 2017 | ISBN: 1617293776 | 376 pages | PDF The content of the web is maturing and increasing in complexity, but internet...

    Web Components in Action

    In Web Components in Action you'll learn to design, build, and deploy reusable Web Components from scratch. Foreword by Gray Norton. Purchase of the print book includes a free eBook in PDF, Kindle,...

    web_xml中ActionServlet中的属性

    以下是对`web.xml`中`ActionServlet`属性的详细解释: 1. **config**: 此属性定义了Struts配置文件的位置。默认值是`config/${prefix}/WEB-INF/strutsconfig.xml`,其中`${prefix}`是应用模块的前缀。这个文件包含...

    mvc通过反射获取action方法(适用于权限控制)

    ### MVC通过反射获取...通过对MVC应用中的控制器和Action方法进行反射获取,我们可以轻松实现基于角色的权限管理,提高系统的安全性。此外,这种方法还具有很高的扩展性和灵活性,可以根据不同的业务需求进行调整。

    通用web层action代码

    通用web层action,完美解决shiro注解权限控制,读取子类泛型

    Web Performance in Action Building Faster Web Pages mobi

    Web Performance in Action Building Faster Web Pages 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Web Performance in Action Building Faster Web Pages 正式版无水印pdf 0分

    Web Performance in Action Building Faster Web Pages 英文无水印pdf pdf使用FoxitReader和PDF-XChangeViewer测试可以打开

    【C#/Web】最新鲜的Web应用权限管理设计

    对Web应用请求进行深度分析,发现不管是页面请求还是ajax请求,只要在后端Controller的Action上设置权限检查关口即可进行精准权限管控。相应的设计思路应运而生。结合反射自动生成权限列表。借助授权过程检查,自动...

    WEB开发INACTION系列

    `Spring in action`会详述如何使用Spring IoC容器管理bean,以及如何利用Spring MVC开发Web应用,同时还会涉及Spring的安全、数据访问和集成其他技术如Hibernate的策略。 4. **Struts**:Struts是基于MVC设计模式的...

    Viajs实现在一个WebWorker中使用DOM

    `Via.js`,正如标题所言,是一个创新性的库,它致力于实现在Web Worker中使用DOM。 `Via.js`的核心思想是将DOM操作的任务分解为可序列化的数据结构,然后在Web Worker中进行处理,最后将结果传递回主线程进行DOM...

    action登陆实现,获取web元素

    总的来说,"action登陆实现,获取web元素"这一主题涵盖了Web开发中Action类的角色、依赖注入的使用以及如何处理用户输入和session状态,这些都是构建动态、交互性强的Web应用程序不可或缺的部分。

    Amazon Web Services in Action(Manning,2015)

    Amazon Web Services in Action introduces you to computing, storing, and networking in the AWS cloud. You'll start with a broad overview of AWS and learn how to spin-up servers manually and from the ...

    Amazon.Web.Services.in.Action.2015.9.pdf

    根据提供的文件信息,“Amazon.Web.Services.in.Action.2015.9.pdf”主要涉及的是亚马逊网络服务(Amazon Web Services, AWS)的相关知识和技术。本书由Andreas Wittig和Michael Wittig编写,并获得了Ben Whaley的...

    commonweb.action

    commonweb.action

    Web.Performance.in.Action.Building.Faster.Web.Pages.epub

    Web Performance in Action is your companion guide to making websites faster. Throughout the course of this book, you'll learn techniques that speed the delivery of your site's assets to the user, ...

    webword in action

    《WebWork in Action》是一本深入探讨WebWork框架在J2EE和Java Web开发中的实践应用的书籍。WebWork是一个轻量级、基于MVC(Model-View-Controller)架构的开源Java Web框架,它提供了丰富的特性来简化开发流程,...

    利用反射 实现一个自制的struts

    1. 使用反射加载和实例化Action类。 2. 创建并实现Interceptor接口,利用反射实例化和执行拦截器链。 3. 设计并实现Dispatcher,用反射处理请求转发。 4. 解析配置文件,构建Action和拦截器的映射关系。 这样的实践...

    用反射代替switch

    使用反射后,我们可以创建一个字典,键是操作名,值是对应方法的委托: ```csharp Dictionary, Action&gt; actions = new Dictionary, Action&gt; { { "Add", AddAction }, { "Delete", DeleteAction }, // ... }; ...

    SPRING WEB-FLOW入门教程

    这意味着你可以在一个流程中使用Struts、Spring MVC、Tapestry、JSP或其他技术。 SWF的工作原理基于状态机的概念,一个Web流程由一组状态(states)组成,每个状态代表流程中的一个节点,如显示一个视图或执行一个...

Global site tag (gtag.js) - Google Analytics