一直以来, 觉得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
从以上统计结果,我怎么也没看出来用代理与不用代理的区别在哪儿??? 也许真的没有
分享到:
相关推荐
动态代理设计模式是一种在运行时创建代理对象的技术,它允许我们为现有的对象提供额外的功能,如日志记录、性能监控、事务管理等,而无需...通过研究提供的源码,你可以深化对动态代理和AOP的理解,提升你的编程技能。
在Java编程中,动态代理是...对于学习和理解这两种动态代理机制,可以参考提供的博客链接,以及深入研究源码,这将有助于提升对Java动态代理的掌握。同时,熟悉这些工具能帮助开发者更好地设计和实现高效、灵活的代码。
### 基于移动代理的动态路由研究 #### 动态路由概述 动态路由是一种网络技术,它允许数据包在传输过程中自动选择最佳路径。与静态路由不同,动态路由能够根据网络状态的变化(如链路故障、拥塞情况等)调整路由...
综上所述,本文深入研究了Android插件化技术,特别是动态代理在其中的应用,为Android开发者提供了一种优化插件化解决方案,旨在提升应用的性能和用户满意度。动态代理的灵活运用,使得在不改变原有系统结构的前提下...
实际开发中,应深入研究每一步的实现细节,理解动态代理类的加载和生成过程,以及如何通过自定义InvocationHandler来控制方法调用的流程。同时,应该考虑如何正确处理方法调用中可能出现的异常情况,保证程序的健壮...
4. **应用场景**:动态代理常用于AOP(面向切面编程),例如日志、性能监控、事务管理等。此外,它也是框架如Spring AOP和JDBC连接池(如C3P0)中的重要组成部分。 在压缩包中的“jdk动态代理”文件夹中,可能包含...
在Java开发中,JDK的动态代理是一种强大的工具,它允许我们在运行时创建代理类,这些代理类可以作为原对象的“代理”,在调用原对象的方法前后执行额外的逻辑,比如日志记录、性能监控、事务管理等。动态代理机制是...
在Java开发中,JDK内置的动态代理机制...了解以上知识点后,你可以根据给定的`src`目录下的源代码自行研究和学习动态代理的具体实现。这将有助于加深对JDK动态代理机制的理解,并可能激发你在实际项目中应用它的灵感。
本文探讨的是一种基于动态代理的Java远程调用框架,旨在解决传统远程调用技术如RMI(Remote Method Invocation)所面临的挑战。 RMI是Java平台上的基础远程调用技术,自JDK 1.1开始引入。它允许对象方法在不同的JVM...
动态代理在Java编程中是一种非常重要的技术,它允许我们在不修改原有对象代码的情况下,为对象增加额外的功能。CGLIB(Code Generation ...通过深入研究CGLIB的源码,可以更好地理解Java字节码和动态代理的底层机制。
5. **AOP(面向切面编程)**:动态代理可以作为实现AOP的一种方式,通过拦截关键方法的调用来实现横切关注点,如日志记录、性能监控等。 在`DynamicProxy-master`这个项目中,可能包含了实现上述功能的示例代码,...
在Java开发中,JDK和CGLib是两种常见的实现动态代理的技术,它们允许我们在运行时创建对象的代理,以增强或拦截对象的方法...对于深入学习,可以参考提供的博文链接以及进一步研究CGLib和JDK动态代理的相关文档和源码。
【基于Linux的代理服务器的研究和实现】 在信息技术领域,Linux操作系统因其开源、稳定和高性能的特点,在服务器端的应用中占据了重要地位。"基于Linux的代理服务器的研究和实现"的主题旨在探讨如何利用Linux系统...
动态代理是Java编程中一种非常重要的设计模式,它允许我们创建在运行时动态实现的代理对象,以便在不修改原始类的基础上扩展或增强其功能。动态代理主要应用于AOP(面向切面编程)和RPC(远程过程调用)等领域,为...
本研究主要集中在如何通过引入自适应主机代理,提升分布式入侵检测系统的性能和效率。 在介绍自适应主机代理的研究之前,首先需要了解移动代理技术。移动代理是一种能够在不同主机之间自主迁移的软件代理,它具有跨...
反向代理服务器可以提高系统性能,解决后期的动态扩展问题,提供一个既可以提高系统性能又可以解决后期的动态扩展的方案。 知识点9:Nginx的特点 Nginx是一款功能强大且高性能的Web服务器软件,支持反向代理功能,...