Java性能优化权威指南1.1 性能问题的现状_Java性能优化权威指南1.1 性能问题的现状试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Java性能优化权威指南 > 1.1 性能问题的现状

Java性能优化权威指南——1.1 性能问题的现状

凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划、方法或策略以及特定领域的背景知识。为了在Java性能调优工作中有所成就,你得超越“花似雾中看”的状态,进入“悠然见南山”或者已然是“一览众山小”的境界。 这3个境界的说法可能让你有些糊涂吧,下面进一步解释。 花似雾中看(I don’t know what I don’t know)。有时候你的任务会涉及你所不熟悉的问题域。理解陌生问题域首先面临的困难就是如何竭尽所能地了解它,因为你对它几乎一无所知。对于这类问题域,你有许多东西不了解,或者不知道重点。换句话说,这个问题域有哪些东西需要了解,你还傻傻看不清楚。这个阶段就是“花似雾中看”。 悠然见南山(I know what I don’t know)。刚进入不熟悉的问题域时,你对它知之甚少,随着时间的推移,你对它的许多重要方面都已有所认识,只是对重要的具体细节还缺乏了解。这时,你可以算是刚刚“见南山”。 一览众山小(I already know what I need to know)。还有些时候,你对任务的问题域非常熟悉,或者已经具有该领域所必备的技能和知识,是这方面的专家。或者你对问题域足够了解,处理起来得心应手,比如你已经掌握了必要的知识,解决问题游刃有余。如果达到这个境界,那就意味着你已经是“一览众山小”了。 如果你已经或打算购买本书,说明可能还没有“一览众山小”,除非你只是想手边有本不错的参考手册。如果还在“花似雾中看”,本章将有助于你找到那些不了解的内容,以及应对Java性能问题的方法或策略。那些“悠然见南山”的读者也能从本章获得有用的信息。 本章首先讨论了性能问题的现状,并建议将性能调优集成到软件开发过程中,接着探讨了两种不同的性能调优方法——自顶向下和自底向上。 1.1 性能问题的现状 通常认为,传统的软件开发过程主要包括4个阶段:分析、设计、编码和测试,如图1-1所示。 分析是开发过程的第一步,用于评估需求、权衡各种架构的利弊以及构思高层抽象。设计则依据分析阶段的基本架构和高层抽象,进行更精细的抽象并着手考虑具体实现。编码自然就是设计的实现。编码之后是测试,用以验证实现是否合乎应用需求。值得注意的是,测试阶段通常只包括功能测试,即检验应用的执行是否合乎需求规格。一旦测试完成,应用就可以发布给客户了。 图1-1 传统软件开发过程 遵循这种传统软件开发过程的应用,通常要到测试或即将发布时才会关注性能或扩展性。为了解决这个问题,Wilson和Kesselman对传统软件开发过程做了些补充,即在传统开发模型基础上引入了性能测试分析阶段,参见他们的畅销书Java Platform Performance。他们建议在测试阶段之后增加性能测试,并将“性能测试是否通过”设定为产品是否发布的标准。如果达到性能和扩展性标准,应用就可以发布,否则就要转向性能分析,并依据分析结果回到之前的某个或者某些步骤。换句话说,通过性能分析来定位性能问题。Wilson和Kesselman添加的性能测试分析如图1-2所示。 对分析阶段提炼出来的性能需求,Wilson和Kesselman建议以用例的方式特别标识出来,这有助于在分析阶段制定性能评估指标。不过应用的需求文档中通常都不会明确描述性能或扩展性需求。如果你正在开发的应用还没有明确定义这些需求,那就应该想办法将它们挖掘出来。以吞吐量和延迟性需求为例,下面的清单列举了挖掘这些需求所要考虑的问题。  应用预期的吞吐量是多少?  请求和响应之间的延迟预期是多少?  应用支持多少并发用户或者并发任务?  当并发用户数或并发任务数达到最大时,可接受的吞吐量和延迟是多少?  最差情况下的延迟是多少?  要使垃圾收集引入的延迟在可容忍范围之内,垃圾收集的频率应该是多少? 图1-2 Wilson和Kesselman添加性能测试分析之后的软件开发过程 需求和对应的用例文档应该回答上述问题,并以此制定基准测试和性能测试,确保应用能够满足性能和扩展性需求。基准测试和性能测试应该在性能测试阶段执行。有些用例在评估时发现风险很高,难以实现,就应该在结束分析阶段之前,通过一些原型、基准测试和微基准测试来降低这类风险。分析结束后再变更决策的代价非常高,这个方法可以让你事先对决策进行评估。软件开发周期中的软件缺陷、低劣设计和糟糕实现发现得越晚,修复的代价就越大,这是一条颠扑不破的金科玉律。降低用例的高风险有助于避免这些代价昂贵的错误。 现在许多应用在开发过程中都会使用自动构建和测试。Wilson和Kesselman建议改进软件开发过程,在自动构建或测试中进一步添加自动性能测试。自动性能测试可以发出通知,比如用电子邮件将性能测试结果(譬如性能是衰减还是改善、性能指标的达成度)发送给干系人。这个过程可以把由于应用性能不达标而失败的测试,以及测试的统计数据自动记录到追踪系统。 将性能测试集成到自动构建过程中后,每次代码变更提交到源代码库时,都能很容易地追踪因变更而导致的性能变化,也就能在软件开发的早期发现性能衰减。 另外,也可以将统计方法和自动统计分析添加到自动性能测试系统。运用统计方法可以进一步验证性能测试的结果。如何用统计方法获取指导和建议呢?对于极少接触这些知识的软件开发者来说颇有难度,这方面内容将在第8章的后半部分介绍。

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Java性能优化权威指南》其他试读目录

• 1.1 性能问题的现状 [当前]
• 1.2 性能分析的两种方法:自顶向下和自底向上
• 1.3 选择正确的平台并评估系统性能
• 1.4 参考资料