论坛首页 Java企业应用论坛

动态代理的性能研究

浏览 2076 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-17   最后修改:2010-01-29
  一直以来, 觉得Java的动态代理机制因为使用了反射, 所以其性能会大受影响, 所以在实际项目中用的不多, 但现在手头上有一个项目, 必须用到拦截器, 而且实现相对简单, 所有就用了动态代理. 闲来无事, 便想测试一下动态代理的性能.
  说明: 说是测试,其实不是很严格, 所以测试数据也不是特别严谨的有统计意义的科学的结果.
  测试环境: Mac OS10.5.5(MB404), eclipse3.4, jkd1.5, hibernate3.2
                其实测试环境是一样的,所以测试数据应该是有可比性的
  测试代码(好像这个说法很业余)如下:
		try {
			PersistentContextInitializer	.init();////在初始化的时候,通过配置文件来控制是否需要代理
			DBTransaction tx = PersistentContext.getDBTransactionFactory()
					.getCurrentDBTransaction();
			tx.begin();
			IDAO dao = PersistentContext.getDAOFactory().createDefaultDAO();////如果需要代理,则获取的是dao代理
			int times = (int)Math.pow(10, 4);
			System.out.println("一共运行" + times + "次");
			long begintime = System.currentTimeMillis();
			for (int i = 0; i < times; i++) {
				dao.find("from GgSwjg where yxBz = 'N'").size();
			}
			long endtime = System.currentTimeMillis();
			System.out.print(((double)(endtime - begintime))/1000.0);
			tx.commit();
		} catch (DAOException e) {
			tx.rollback();
			e.printStackTrace();
		} finally {

		}

  GgSwjg表中一共有1107条数据,其中dao.find(...)可以查询出10条记录
所使用的时间如下(单位:秒)
不使用代理:
  47.785, 47.881, 47.407, 47.681
使用代理:
  48.544, 48.362, 47.881, 49.077

  从以上统计结果,我怎么也没看出来用代理与不用代理的区别在哪儿??? 也许真的没有
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics