- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java性能测试原则
引言 计算机软件作为人类智慧的结晶,帮助我们在这个日新月异的社会中完成了大量工作。我们的日常生活中已经离不开软件,玲琅满目的软件已经渗透到了我们生 活的各个角落,令我们目不暇接。我们都希望软件变得更好,运行处理的速度更快,在当今硬件性能突飞猛进的变革中,软件性能的提升也是一个永不落伍的话题。 软件性能测试的实质,是从哲学的角度看问题,找出其内在联系,因果关系,形式内容关系,重叠关系等等。假如这些关系我们在分析过程中理清了,那么性能测试 问题就会变得迎刃而解。 在软件开发过程中,性能测试往往在开发前期容易被忽略。直到有一天问题暴露后,开发人员被迫的直面这个问题,大多数情况下,这是令开发人员感觉到非常 痛苦事情。所以在软件开发前期以及开发过程中性能测试的考量是必要的,那么具备相应理论知识和实践方法也是一??优秀工程师所应当具备的素养,这里我们概括 有四项原则,这些原则可以帮助开发人员丰富、充实测试理论,系统的开展性能测试工作,从而获得更有价值的结果。 实际项目中的性能测试才有意义 第一个原则就是性能测试只有在实际项目中实施才是有意义的,这样才使得测试工作具有针对性,而且目标会更加明确。这个原则中有三个类别的基准可以指导开发人员度量性能测试的结果,但是每一种方法都有它的优点和劣势,我们将结合实际例子,来总结阐述。 微观基准,可以理解为在某一个方法或某一个组件中进行的单元性能测试。比如检测一个线程同步和一个非线程同步的方法运行时所需要的时间。或者对比创建 一个单独线程和使用一个线程池的性能开销。或者对比执行一个算法中的某一个迭代过程所需要的时间。当我们遇到这些情况时,我们常常会选择做一个方法层面的 性能测试。这些情况的性能测试,都可以尝试使用微观基准的方法进行性能测试。微观基准看似编写起来简单快捷,但是编写能够准确反映性能问题的代码并非一件 易事。接下来通过例子让我们从代码中发现一些问题。这是一个单线程的程序片段,通过计算 50 次循环迭代来检测执行方法所耗费的时间体现性能差异: public void doTest() {double l;long then = System.currentTimeMillis();int nLoops = 50;for (int i = 0; i nLoops; i++) {l = compute(50);}long now = System.currentTimeMillis();System.out.println(Elapsed time: + (now - then));}private double compute(int n){if (n 0)throw new IllegalArgumentException(Must be 0);if (n == 0)return 0d;if (n == 1)return 1d;double d = compute(n - 2) + compute(n - 1);if (Double.isInfinite(d))throw new ArithmeticException(Overflow);return d;} 执行这段代码我们会发现一个问题,那就是执行时间只有短短的几秒。难道果真是程序性能很高?答案并非如此,其实在整个执行过程中 compute 计算方法并没有调用而是被编译器自动忽略了。那么解决这个问题的办法是将 double 类型的“l”换成 volatile 实例变量。这样能够确保每一个计算后所得到的结果是可以被记录下来,用 volatile 修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最后的值。 要特别值得注意的是,当考虑为多线程写一个微基准性能测试用例时,假如几个线程同时执行一小段业务逻辑代码,这可能会引发潜在的线程同步所带来的性能 开销和瓶颈。此时微观微基准测试的结果往往引导开发人员为了保持同步进行不断的优化,这样会浪费很多时间,对于解决更紧迫的性能问题,这样做就显得得不偿 失。 我们再试想这样一个例子,微基准测试两个线程调用同步方法的情况,因为基准代码很小,那么测试用例大部分时间将消耗在同步过程中。即使微基准测试在整 体的同步过程中只占 50%,那么两个线程尝试执行同步方法的几率也是相当高的。基准运行将会非常缓慢,添加额外的线程会造成更大的性能问题。 基于微观基准的测试过程中,是不能含有额外的对性能产生影响的操作,我们知道执行 compute(1000) 和 compute(1) 在性能上是有很大差异的,假如我们的目标是对比两个不同实现方法之间的性能差异,那么就应当考虑一系列的输入测试值作为前提,传递给测试目标,参数就需要 多样化。这里以我们的
您可能关注的文档
最近下载
- 《地下工程防水技术规范》XX50108-2008正文精华版.doc VIP
- 颞下颌关节.ppt VIP
- 第12课《班级电子纪念册设计》课件共16页.pptx
- (2025秋新版)人教版三年级数学上册全册教案.doc
- IPC-6012F 2023 EN,刚性印制板性能要求Qualification and Performance Specification for Rigid Printed Boards.pdf VIP
- 部编版八年级历史上册第2课《第二次鸦片战争》测试题(含答案) .pdf
- 某企业人才盘点项目启动会.pptx VIP
- 2025届高考数学命题趋势分析与备考策略指导及新质课堂建设课件.pptx VIP
- 2024年中国企业出海洞察及全球趋势展望报告.pdf VIP
- 133附件安全生产费用使用计量支付管理细则.doc VIP
文档评论(0)