从Sun实验室中的GCspy、Ace、JFluid项目看
沈捷
从1995年James Gosling发明至今,java的发展早已逾越了一门单纯计算机语言的范畴,成为了一个涵盖范围非常广的平台。在下面的篇幅里,笔者会就一些有趣的、带有研究性质的项目进行介绍。
Ace_1:NameTool的业务对象及逻辑
在Sun的实验室里有一些有意思的项目在进行着,比如GCspy。GCspy是一个使内存治理工作可视化的框架(当然它会包括一个实现了这个框架的工具)。我们可以用它动态地考察系统的内存分配、垃圾回收等行为。假如用户需要,它甚至可以把追踪下来的内存治理行为进行“回放”(replay)。为了把对被观察系统的影响减至最低,GCspy采用client-server结构,以socket作为通信方式。在这种方式下,客户端还可以灵活地决定何时跟服务器连接。在图形客户端上,我们可以以不同的视图来观察系统的内存治理工作。除了动态的观察系统行为,GCspy还可以对指定的一段时间做出趋势图。这可以使我们对系统的内存治理有一个整体的了解。适当地应用GCspy的这些功能,对我们调整GC参数会非常有启发。
其他还有一些处于研究阶段的项目。首先看看Ace,通过这个名字,我们便可以感觉到这个项目的目标——完成一个复杂的项目就像通过一记Ace球得分一样简单。Ace的目的是为企业级应用建立一种规格语言(Specification Language),以及与之相配套的编译器。这种语言与架构无关,这使得精通业务的专家可以用它去描述应用系统的功能,用它写出一份简练的系统规格说明,而不用涉及任何与系统架构相关的实现细节。之后,我们可以用Ace的编译器来生成实现和部署这一应用所需的所有代码和描述文件。与现有IDE中的代码生成向导(wizard)不同,我们无需对Ace编译器产生的代码作任何编辑和修改。对于不同的中间件产品、不同的系统架构,我们只需重新编译一遍用Ace规格语言所写的源代码。不仅如此,Ace编译器还具有代码优化功能。一份Ace规格说明由两部分组成,分别是:应用程序的业务对象及逻辑,和应用程序的业务流程。听起来是不是有些难以置信?到Sun的网站上(http://research.sun.com/PRojects/ace/)去看看用Ace开发的Java Pet Store。看看在短短的224行代码里,Ace到底帮我们做了些什么。
接下来我们看看JFluid,JFluid是一个动态性能分析工具(dynamic application profiling tool)。和现有的分析工具不同,JFluid的操作完全发生在应用正常运行的过程中,也就是所谓的on-the-fly profiling。在程序的运行时间(run time),我们可以随时打开、关闭、重新配置附属在JVM上的JFluid。JFluid可以动态地把一段用于分析的字节码附加到正在运行的Java代码中,而这段Java代码可以是正在运行的应用系统中任意指定的一个子集、任意一个或多个方法。被加进去的JFluid字节码会产生用于分析的事件,这些事件被记录下来之后,会据此产生性能报告,报告会以我们通常所看到的格式(比如在OptimizeIt里那样)显示出来。通过这个工具,我们可以花费更少的努力,更灵活地得到程序运行的动态信息。不过,由于JFluid需要用到虚拟机的“动态字节码”(dynamic bytecode instrumentation)功能,所以它只能运行在具有这一功能的、尚未正式发布的新版HotSpot JVM上。