WEB开发网
开发学院软件开发Java Java 编程的动态性,第 8 部分: 用代码生成取代反... 阅读

Java 编程的动态性,第 8 部分: 用代码生成取代反射

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示:从本系列前面的文章中,您了解到反射的性能比直接访问要慢许多倍,Java 编程的动态性,第 8 部分: 用代码生成取代反射,并了解了用 Javassist 和 Apache Byte Code Engineering Library (BCEL)进行classworking,Java 顾问 Dennis Sosnoski

从本系列前面的文章中,您了解到反射的性能比直接访问要慢许多倍,并了解了用 Javassist 和 Apache Byte Code Engineering Library (BCEL)进行classworking。Java 顾问 Dennis Sosnoski 通过演示如何使用运行时 classworking,来用全速前进的生成代码取代反射代码,从而结束他的 Java 编程的动态性系列。

既然您已经看到了如何使用 Javassist 和 BCEL 框架来进行 classworking ,我将展示一个实际的 classworking 应用程序。这个应用程序用运行时生成的、并立即装载到 JVM 的类来取代反射。在综合讨论的过程中,我将引用本系列的前两篇文章,以及对 Javassist 和 BCEL 的讨论,这样本文就成为了对这个很长的系列文章的一个很好的总结。

反射的性能

在 第 2 部分,我展示了无论是对于字段访问还是方法调用,反射都比直接代码慢很多倍。这种延缓对于许多应用程序来说不算是问题,但是总是会遇到性能非常关键的情况。在这种情况下,反射可能成为真正的瓶颈。但是,用静态编译的代码取代反射可能会非常混乱,并且在有些情况下(如在这种框架中:反射访问的类或者项目是在运行时提供的,而不是作为这一编译过程的一部分提供的),如果不重新构建整个应用程序就根本不可能取代。

Classworking 使我们有机会将静态编译的代码的性能与反射的灵活性结合起来。这里的基本方法是,在运行时,以一种可以被一般性代码使用的方式,构建一个自定义的类,其中将包装对目标类的访问(以前是通过反射达到的)。将这个自定义类装载到 JVM 中后,就可以全速运行了。

1 2 3 4 5 6  下一页

Tags:Java 编程 动态性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接