Java开发中为什么需要持续性能管理

   许多企业java应用的性能通常可能比较差,这会影响到许多公司的收入和信誉。消除java应用性能问题的最佳方法,就是在开发应用时采用有效的性能测试策略。目前,最先进的性能测试策略是持续性能管理(CPM)。持续性能测试强调在开发人员将代码提交到源代码库时,自动化性能测试所有测试用例。

 

1.为什么需要一个新的方法论

 

      持续性能管理(CPM)是一个崭新的,敏捷的方法论,是对java开发中的两个基本问题的回答:

 

1、行业分析师从通过分析企业部署在生产环境中的Java应用,多次发现生产中的Java应用不能满足他们的性能标准;

 

 

2、避免性能问题的最好办法,是在应用开发中实施主动的性能测试,但是,即使是中等规模的应用,定期执行这些测试和审查测试结果所需要的时间都让人望而却步。

 

 

1.1. 尽早解决性能问题能够节省时间和成本

 

      在应用开发生命周期的早期识别性能问题能够节省相当多的时间和金钱,如图1所示

Java CMP

 

图 1解决性能问题的代价

 

 

1.2. CPM帮助尽早解决性能问题

 

      在应用的开发阶段尽早识别性能问题的最好方法,是在一个应用正在开发时进行主动的性能测量。具体而言,这意味着我们应该在单元测试级别实现性能测试。

      使用像JUint这样的工具为组件开发测试用例是公认的惯例。然而,这些工具只测试功能,而没有测试性能。CPM扩展了单元测试范例,所以一旦我们确认一个组件的功能是正确的,接着就会测试它的性能。具体地,我们从三个方面测试它的性能:

      代码分析:代码中是否存在过慢的算法逻辑?是否存在过多的递归?或者简单地说,代码中是否存在需要花时间调优的地方?

      内存分析:对象是否被适当管理?是否有对象在不经意间留在了堆中或者循环(快速被创建和销毁,这增加了垃圾回收的频率)?

      覆盖率分析:测试用例是否执行了足够的代码,给我带来代码和性能分析结果的自信?

 

1.3. 贯彻对象的生命周期管理

 

      内存泄漏,过多的短生命周期对象等问题是Java开发中最常面临的问题。其关键是引用管理。有效的引用管理,包括:设计,实现和文档。

      ■ 设计中的引用管理:

      对每一个应用层次的用例,应精确说明每个对象的生命周期,及各个对象之间的关系。应定义对象的创建时间,有用的期限,以及清除对象的时间;对象间关系的类型和生命周期(建立和删除关系)。

      在J2EE应用中,生命周期可分为应用级,会话级,请求等;针对特殊的缓存设计,应关注其对象生命周期的描述,及对象的内存消耗;

      ■ 编码中的引用管理:

      内存泄漏,通常是编码的错误,例如忘记将一个引用变量设为null等。可以使用JProbe Memory Analysis进行验证是否与设计相符合。

      ■ 编写文档中的引用管理:

      如果一个方法接受一个对象应用,并且在内部保留了该引用,那么应该运用对称的原则记录下删除该引用的方法。