永远记住:任何浪费资源的行为都是不可取的。这一点同样适用于计算机编程。
我们在计算机编程的时候,除了需要实现必须的功能之外,还需要考虑两个很重要的指标:时间复杂度和空间复杂度。时间复杂度指的就是程序执行的时间长度,空间复杂度指的是程序执行消耗的内存存储量。这里我把空间复杂度扩展一下,指的是消耗的计算资源,包括内存,CPU,硬盘,数据库开销。
- 尽管现在内存容量已经很大,但是对于程序而言,消耗的内存永远是越少越好!这里只说一些常见的问题:定义变量。我们在定义变量的时候应该遵从小范围原则,就是如果能够定义局部变量,那就不要把这个变量放到全局来,而且如果没有用到,不要对这个对象实例化。所谓的对象实例化,就是new,也就是说定义变量可以,但是在你用到的时候再new。因为程序中有很多情况,所以有时候这个变量定义了却没有被用到,那么如果你刚开始就把对象定义并且实例化了,无疑会浪费不必要的内存空间,所以定义和实例化变量的原则是:不到万不得已不定义。就是说如果不定义这个变量程序进行不下去了,那么这个变量才应该被定义和实例化出来,否则你可以考虑把他放在局部去,在需要的时候才实例化;
- 如果你的程序中同时定义了相同的或者类似的很多个变量或者对象,其实这是很消耗CPU的,这时候可以考虑使用对象的复制(clone),这样能够减少很多不必要的系统开销;
- 数据库的开销是很大的,数据库连接池很必要,另外如果同一个类用到很多次数据库连接,那么尽量不要不停的开闭,这样会造成很大的资源消耗,而是应该拿到一个连接之后把所有的数据库操作全部做完,再释放连接(非常重要)。在计算机中,不用的东西要全部取消掉:变量,类,数据库连接。用完之后要全部处理掉(destroy),当然Java有内存回收机制(双刃剑),情况另行讨论;
- 硬盘的开销在程序使用的时候是很少的,因为现在计算机的瓶颈基本上卡在了硬盘的速度上。因为硬盘的速度很低,所以很多时候我们愿意把数据放到内存当中以提高速度,而实际上,如果一个程序中的有些数据很少用到,那么为了分担内存的压力,是可以把一些数据存放到硬盘上的,比如我们常用的配置文件信息等,这样能够节省一部分的内存空间,毕竟内存空间比硬盘珍贵的多。
其实在编程的过程中这种资源的浪费是很多的,需要从小的地方做起,哪怕是一个小小的变量也要考虑它是不是需要定义。空间复杂度是衡量一个程序好坏的重要标准之一。
太高深的理论了。呵呵
@刀河 这个还好吧,不算高深,都是细节的东西
刚看到你这篇文章。可别说,今天sky发现我在杨式框架中添加了一个读xml流没有关闭……
@Hope 这种问题防不胜防
我只要能用就行
@开心凡人 这个不是针对用户的,是针对程序员的
感觉少了一个,那就是网络开销。综合起来时间就是效率的问题,空间就是精炼的问题,也可说是效率的问题。
@天缘博客 嗯,网络开销其实仍然是内存浪费的问题了,不过这是另外一个编程范围,那就是网络编程
@老杨 网络开销应该算程序设计效率问题,在同一时刻未必会更多内存浪费,不过你的理解已经很上层次了,经验上应该比较丰富,否则很难提炼这些内容,新手提炼出来也未必会说的清楚。
很多只会ASP、PHP或配置个服务器的网友可能很难理解这些内容,很不错,支持你。
@天缘博客 谢谢,我是写给师弟师妹的,希望他们能理解
不会变成的路过
@蓝冰 你应该会,php你不会么?
高端项目,编程好难啊。
@太阳博客 也不是什么高端项目了,都是最基本的
我平时也就是写点网站代码,还谈不上浪费资源吧~
@huangjun 网站代码如果浪费的话,那么有可能导致你的服务器速度减慢,或者网页代码增多,用户打开的速度变慢,也是有负面影响的
编程,对小农夫来说太难了
@小农夫 嗯,比较专业了这个