J2EE序最优化.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
J2EE序最优化

第2章 程序最优化 2.1 空间与时间 计算机中最核心的资源就是CPU与存储器,任何程序的运行都离不开此二者。任何程序的运行都要进行计算,这就会消耗CPU时间;任何程序的运行也都需要进行数据处理,而CPU中是无法存储数据的① CPU中的寄存器具有一定的存储能力,但是这种存储能力是为CPU的运算提供帮助的,与我们通常意义上的存储器有所区别。现代的CPU内部都集成了缓存功能,这些缓存是一种存储器,但是从某种意义上来说这些缓存只是嵌入在CPU内部的“ ① CPU中的寄存器具有一定的存储能力,但是这种存储能力是为CPU的运算提供帮助的,与我们通常意义上的存储器有所区别。现代的CPU内部都集成了缓存功能,这些缓存是一种存储器,但是从某种意义上来说这些缓存只是嵌入在CPU内部的“外部的存储器”,并不是CPU的必备部件,它们和内存、外部存储器一起构成了计算机的存储器系统。 2.1.1 空间与时间的概念和度量 通俗地讲,一个算法的空间消耗指的是这个算法运行所需要的存储空间大小,而时间消耗指的是算法运行所需要的时间。一个算法运行时所消耗的空间与时间通常与运行环境有关,同一个算法在配置不同的计算机上运行的时间消耗和空间消耗也不同。比如对于一个存储空间需求极大的算法,如果可用的存储空间不够,在运行的时候就要频繁地进行内外存的交换,这样需要运行的时间就会变长;如果可用空间足够大,但是CPU运行速度较慢的话,就会导致算法占据存储空间的时间变长,从而导致占用的存储空间的总体值上升。必须找到一种不依赖于软硬件条件的对空间与时间进行度量的方法,而算法的复杂性即与具体的运行环境无关,所以通过比较算法的复杂性来评价算法是比较合理的。 算法的复杂性分为空间复杂度和时间复杂度。空间复杂度是指当问题的规模以某种单位从1增加到n时,若解决这个问题的算法在执行时所占用的存储空间也以某种单位从1增加到f(n),那么就称此算法的空间复杂度为f(n);时间复杂度是指当问题的规模以某种单位从1增加到n时,若解决这个问题的算法在执行时所消耗的时间也以某种单位从1增加到g(n),那么就称此算法的时间复杂度为g(n)。空间单位一般规定为一个工作单元所占用的存储空间的大小,时间单位一般规定为一个程序步。 我们需要一种方式来把空间复杂度和时间复杂度的度量弄得更精确一些,为此,人们提出了一种标准的记法,被称为“大O记法”。在这种记法中使用的基本参数是n,也就是问题的规模,把复杂度表示为n的函数。这里的“O”是英文“Order”的缩写,此处的“Order”不是“顺序”的意思,而是代表“数量级”。比如说“数组遍历是O(n)的”,意思就是说“通过O(n)量级的步骤去遍历一个数组”。 2.1.2 空间与时间的背反 我们总是追求程序通过占用最少的存储空间以最快的速度(即最少的CPU时间占用)来完成任务,但是这两者常常是此消彼涨的:当一个程序改进到能够占用更少存储空间的时候,它消耗的CPU时间就会增加;当一个程序改进到占用较少的CPU时间的时候,它占用的存储空间通常又会上升。 比如,计算高精度的?值是非常消耗系统CPU时间的,而其占用的存储空间则相对较小。为了防止每次计算都消耗漫长的CPU时间,可以在一次计算以后把计算结果保存到存储器中,这样下次计算的时候直接从存储器中读取就可以了,这样占用的CPU时间就非常短了,但是占据的存储空间就增加了。 数据库的索引也是一个明显的例子。为了提高数据检索的速度,常常需要对数据表的字段建立索引,这样就可以用更少的CPU消耗来检索到需要的数据了,但索引是要占据存储空间的,这就导致了存储空间的上升。 既然空间与时间的占用存在着这种背反性,那么必须在空间与时间的优化上找到一个平衡点。现代的计算机的存储器容量非常大,而且价格也非常低廉,而CPU则属于比较宝贵的资源,所以现代的程序设计更多的是以空间换取时间,也就是用较高的存储空间占用来换取较少的CPU时间。 2.1.3 以空间换时间 以空间换时间的例子是非常多的。 【例2.1】阶乘计算。 本实例给定一个整数n(n大于等于0,小于等于10),计算它的阶乘值。 算法1(普通的阶乘计算): public class JCCalc01 { public static void main(String[] args) { for (int i = 0, n = 10; i n; i++) System.out.println(calcFactor(i)); } private static int calcFactor(int value) { if (value 0 || value 10) { throw new IllegalArgumentException(); }

文档评论(0)

md85173 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档