用Runtime Spy调整Eclipse的启动性能,第1部分 - 开始2010-12-02 IBM Dan Kehn我们几乎每天都会听说有新的公司选用 Eclipse 作为他们的应用程序开发平 台。尽管所有这些公司的产品(更不用说所有的 Eclipse 组织成员公司的产品 了)的安装设置可能是正在趋于相同,但是内存使用过多和性能下降的风险还是 很大。本文介绍了一个非常有用却鲜为人知的工具,Runtime Spy,来帮助插件者。Runtime Spy 透视图是核心团队(Core team)的侦探和工具(Spies and Tools)小组的一部分。注意:核心工具只能运行于 Eclipse 版本 2.x。在本文发表时,它们还不能 运行于 Eclipse 3.0 驱动程序上;编号为 47518 的 bug 描述了这一问题。为什么 Eclipse 需要快速启动Eclipse 的体系结构是为了在运行期发现其环境的扩展而设计的。这种体系 结构化扩展能力让很多工具可以无缝地集成到 Eclipse 中。Eclipse 架构师在 项目早期就意识到,这些扩展不能在客户机代码中以程序控制的方式定义,因为 当 Eclipse 集成了越来越多的扩展后,累积的启动开销将变得无法接受。从而 ,这些扩展由 插件 定义。为了在保持灵活性的同时避免启动开销,插件静态地将它的扩展定义在一个 清单文件(manifest file)中。插件清单定义了足够的信息,使 Eclipse 平台 可以延迟加载代码,同时仍可以识别扩展的初始影响。例如,用户界面扩展点需 要足够的信息来描绘初始的用户界面元素(例如,所提供的工具条按钮的图标和 热区提示(tooltip)文本),这样平台可以推迟插件代码的加载,直到用户真 正选择一个菜单选项、选择一个工具条按钮、打开一个属性页或者启动某个向导 时才加载。插件的最初开销只是对其清单的解析。XML 格式的解析很快,结果保 存到磁盘,下次还可再用,这样,当定义了新的插件或者扩展时,启动不会受到 显著影响。不过,有一些方法会无意中让这种好处失效,从而增加了启动时间和 内存消耗。幸运的是,Eclipse 插件开发者可以使用 Runtime Spy 透视图来帮助追踪这 些问题。本文介绍了核心工具插件和它的 Runtime Spy,并介绍了 readme 文件 内容之外的对其实用工具的一些零散描述。安装核心工具安装很简单。只需要下载核心工具压缩包并解压缩到您的 <inst_dir>eclipseplugins 目录。接下来决定您是不是希望侦探您的 底层 Eclipse 设施(使用 -debug 命令行选项),或者是不是希望侦探您的运 行期工作台(使用它的启动配置的 Tracing 页。我们将在“ 侦探运行期工作台 ”回到这一话题)。现在让我们来看第一个选择:侦探您的底层 Eclipse 设施 。首先,从 pluginsorg.eclipse.core.tools_1.0.2 子目录下拷贝 .options 文件到您的 <inst_dir>eclipse 目录来,以启用所有可用的 Spy 选项 。这将启用除了类监视以外的所有选项。要监视类的加载,您必须在 pluginsorg.eclipse.core.boot_1.0.2 race.properties 文件中列出包含您 所感兴趣的类的包或者插件。在“ 查看插件的哪些类被加载”部分我们再向您 介绍如何指定这些内容。然后启动 Eclipse,不要忘记指定 -debug 命令行选项,这会去读位于 <inst_dir>eclipse 目录下 .options 文件。另一种方法,您可以将 .option 文件所在的位置标识为 -debug 选项的一个参数(例如, -debug file:d:....options )。侦探工作台我们假定您已经安装了核心工具文件,并重新启动了 Eclipse。由于已经指 定了 -debug 命令行参数,您将会看到定向到标准输出的一些启动消息。当处于 调试模式时,这些将显示在一个单独的命令提示窗口中,如图 1 所示。图 1. 对 -debug 选项的指定打开了一个显示标准输出消息的命令提示窗口

既然每个 Runtime Spy 的视图都已经启动并运行,让我们来快速浏览一下这 些视图。不要忘记,Spy 作为“spied”插件在同一个工作台中运行,因此在使 用工具本身的正常过程中可能会有一些插件被激活。这通常没关系,因为它只是 用到了底层的功能,而这些功能应该已经加载或者早晚都得加载。有一种情况未 必会出现,但确实重要,那就是别忘了它的视图只是根据需要而更新,所以 Runtime Spy 透视图第一次打开时,它将只显示出在它自己启动之 前 就已经在 运行的那些插件。查看哪些插件在运行选择 Window > Open Perspective > Runtime Spy打开四个视图,如 图 2 所示。图 2. Runtime Spy 透视图由 Activated Plugins、Loaded Classes、 Plugin Datasheet 和 Stack Trace 视图组成