程序如何怎样才能提高学习效率执行的效率和速度高

关于多线程提高程序执行速率的问题_百度知道
关于多线程提高程序执行速率的问题
多线程可以提高,程序的执行速度。从宏观上讲好像是多个线程同时执行。但微观上,线程的执行都是要占用cpu的时间片的,也就是一个时间只能执行一项任务。为什么会提高执行速度呢?不是...
多线程可以提高,程序的执行速度。从宏观上讲好像是多个线程同时执行。但微观上,线程的执行都是要占用cpu的时间片的,也就是一个时间只能执行一项任务。为什么会提高执行速度呢?不是很明白
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:244
获赞数:633
我认为,多线程提高效率是有前提的。如果只是让CPU执行计算,就像你说得,现在的微机都是分时处理,单线程和多线程的效率几乎一致,甚至单线程还要快一点,关于这个我是做过测试的。多线程提高效率的情况是,比如需要等待IO或者用户响应的情况。举个列子,一个ping的小程序。从网址192.168.1.1到192.168.1.255,循环ping,假设每个网址都ping不通,计算机等待3秒超时。如果使用单线程,则需要255*3秒时间。如果使用C#线程池或者4.0的并行计算,则会节约10倍左右的时间。
hulala2000
hulala2000
采纳数:21
获赞数:61
擅长:暂未定制
多线程只有在多处理器系统(比如多核、smp等)上才有可能提高执行速率。在多处理系统上,将要执行的任务分割成多个可并行执行线程,就可以提高执行速率。但是如果任务本身不可并行,比如就是一个有限状态自动机的程序,那就没办法用到多处理机,也不能提高速率。上面说的是并行,不是并发。单处理器上多线程只能并发执行而不是并行,多线程并不能提高纯计算程序的速率。但是对于一般程序中都有i/o操作等,可以将io操作放到一个线程中执行,从而可以在io同时进行其他操作不比等待io完成,这样可以提高速率。不宜创建过多线程,因为线程context switch造成很大的cpu负荷,并且线程占用内存资源。现在的网络服务器为了支持大量并发多不是靠多线程或多进程,而采用其他的技术如异步i/o,i/o multiplexing
狗都撵不倒
狗都撵不倒
采纳数:17
获赞数:23
如果从运算效率上来说,多线程的优势必须要多核的CPU和64位的操作系统才能体现但是从一些程序的流程上来说,多线程是非常必要的,比如一个WINFORM的程序不用多线程处理的话,当你程序在运算某种数法的时候,你的主窗体就处于一个假死状态因为你的程序只有一个线程,它处理了运算过程,放弃窗体的显示这一块,而多线程则刚好解决了这个问题
采纳数:117
获赞数:299
你要更宏观的 来理解现在你只是看到你这一个程序,如果有10个程序 ,你这个一个程序多开了一个线程就把原本其他程序使用cpu的时间抢了过来原来你这个程序1分钟内只能占用cpu 10秒钟 线程多了以后1分钟内可以占用20秒了没准
其他1条回答
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。下列关于程序效率的描述错误的是()。A.提高程序的执行速度可以提高程序的效率B. - 软题库
已开通智能题库考试
软件测试题以及答案
信管考点分类:试题来源:
&下列关于程序效率的描述错误的是( &)。&A.提高程序的执行速度可以提高程序的效率&B.降低程序占用的存储空间可以提高程序的效率&C.源程序的效率与详细设计阶段确定的算法的效率无关&D.好的程序设计可以提高效率&
你可能感兴趣试题
第31题: 火车售票点T1、T2分别售出了两张日到北京的硬卧票,但数据库里的剩余票数却只减了两张,造成数据的不一致,原因是 () 。A.系统信息显示出错&B.丢失了某售票点修改&C.售票点重复读数据&D.售票点读了“脏”数据答案解析与讨论:第31题: &CA在数字签名当中扮演的主要角色是()。A、签名者B、仲裁C、验证者D、攻击者&答案解析与讨论:第15题:
系统转换的方式中,最适合于规模较大且复杂的系统的是( ) A& 同步转换 B& 分段转换 C& 直接转换 D& 并行转换答案解析与讨论:第10题: &IT服务管理的国际标准是A) ITIL V3B) COBITC) ISO/IEC 20000D) BS 15000答案解析与讨论:第50题: ( )是电信网的核心。A、用户终端设备 &B、网络节点C、传输链路
&D、用户环路答案解析与讨论:第22题: 关于程序语言的说法,错误的是()。A.脚本语言属于动态语言,其程序结构可以在运行中改变B.脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序C.php、JavaScript属于静态语言,其所有成分可在编译时确定D.C 语言属于静态语言,其所有成分可在编译时确定答案解析与讨论:程序优化技术都有哪些,如何提高程序的执行效率-CSDN论坛
图形处理/算法
程序优化技术都有哪些,如何提高程序的执行效率
vc平台开发的程序,如何提高程序执行效率,都有哪些方法,现在知道的是:从算法上优化,采取更好的算法,采用更有效率的库,瓶颈代码的底层汇编优化,多线程,提高程序并发性等,有什么可以推荐的书没有,看过《我的编程之旅》里面介绍了一些游戏优化方法,比较实用,还有更多的书推荐没有,中文版或者英文原版的,
该回复于 13:18:17被版主删除
可以采用一些底层代码优化,例如浮点整型化,分解嵌套结构,MMX/SSE,改变结构成员布局,等等
期待这方面高手&给个明路
自己顶,等待有经验的人士回答
用GPU优化,参考nvida的CUDA
还有一些,你上网搜搜看
我也想知道。。。
有的,我记得微软专家写的一本书提到了:&多使用Windows&API
看具体情况,如果是有规律的算法,象多媒体方面的数据处理,很多用mmx&sse汇编优化,效果就很理想了
1、分析速度瓶颈;
2、减少调用次数;(避免重复调用等)
3、优化函数实现;(涉及到&SSE&等)
4、使用&inline,避免函数调用的开销;
5、自己管理内存,避免内存分配的开销;
有本书叫做C++应用程序性能优化
引用&10&楼&visualeleven&的回复:有本书叫做C++应用程序性能优化
恩,我有的,不过是英文版
发给偶吧,邮箱xiaoyilong_
CSDN应该有下的,我在单位,这里没有
只用过AQTime测过代码的瓶颈..然后优化之..
effective&系列丛书
描述的都是从语言级别上的优化
但我觉得算法优化才是王道
顶啊,学习了。
去CSDN看看
组织构架上优化,之后再做细节的优化
看看。。。
看优化什么了,运行速度,启动速度还是运算速度
来学习。。。。。。。。。。。
不错,学习了。。。。
不懂,学习学习。。
该回复于 15:50:53被版主删除
我来踩踩啊吧
努力学习中
居然被推了,自己顶下
可以在架构上进行优化,一个优雅的设计,可以带来效率上的提升。
最好的方法&
直接用汇编+api
合理使用内存,提高cache的命中率,对性能也是很有帮助的。
引用&15&楼&libinfei8848&的回复:effective&系列丛书
描述的都是从语言级别上的优化
但我觉得算法优化才是王道
不过问题是一般来说程序的大多数地方不存在算法与否的问题,&只是简单的流程执行,因而很难做实质上的优化。从8:2法则的观点看,找到实际上消耗CPU最多的那部分代码优化之才是最关键的,但讽刺的是,这部分代码往往既不好找,不容易被优化
该回复于 13:40:53被版主删除
受益了!!
我也想学习呢
该回复于 10:35:54被版主删除
该回复于 10:35:55被版主删除
使用profile,让数据说话
程序=数据结构+算法,衡量它们的是时间和空间!最后加上复杂度和维护成本!
优化要看场景!
1、减少程序在核心态和用户态之间的切换
2、使用线程代替进程以减少系统资源的开销
3、减少线程场景切换的开销
4、减少内存的跨边界(页)访问
学习了,去找书看看
就程序优化这个概念是要在大项目中才能体现的。
自己管理内存,
优化关键代码,
使用高性能库,
该回复于 13:08:46被版主删除
该回复于 13:08:44被版主删除
观看大家的发言
期待这方面高手&给个明路zouzou
顶啊,学习了。
1、调用数据库的时候,存储过程
2、少用循环
3、共性提取,尽量变成类库、dll
再高深的那些个算法啊,也不怎么说的清。
努力学习中
用一些底层代码优化,
看实际情况,解决方法也大相径庭
有些时候只要用第三方库就相当优化了
有些时候一定要自己写
有些时候加个sleep(1)就没事了
有些时候在不考虑那一点点成本的话,买现成硬件也是优化的好办法
该回复于 10:45:09被版主删除
受教了,多谢各位的指点
多线程能不用锁的地方,尽量不用锁,while()中sleep()有时也能降点cpu占用率
该回复于 09:18:37被版主删除
引用&56&楼&yfh1985sdq&的回复:多线程能不用锁的地方,尽量不用锁,while()中sleep()有时也能降点cpu占用率
该回复于 10:13:23被版主删除
朗道英汉汉英词典
这段时间有些晕哟
该回复于 09:51:35被版主删除
第一层,架构上优化,否则下面的优化都是白搭
第二层,算法上优化,否则下面的优化都是白搭
第三层,语法上优化,养成习惯不用低效的语法足矣,刻意使用高效语法属于下一层
第四层,自作聪明的优化,费力不讨好
引用&30&楼&xieshen947&的回复:最好的方法&
直接用汇编+api
怎么维护...
该回复于 11:48:26被版主删除
火速围观!!!
优化有很多,具体情境具体分析
膜拜&关注~
学习了。。。
关键是监控和分析工具,测出瓶颈在哪。
比如有些单机软件,解码编码等,其消耗是大量的计算,那么这种情况下指令优化和换更好的编译器包括GPU加速等就很有用
而如果是网络应用,那么瓶颈在带宽以及连接开销等,那么可以考虑精简通信协议
我也想学习这方面东西!期待高手出现!
使用profile,让数据说话
该回复于 09:17:00被版主删除
程序员需要看好书&。。。
effective&C++
我觉得有一个原则,就是尽量不要考虑底层的优化,比如提高线程并发度,这种优化除非在设计前期就考虑使用,在后期采取这种办法优化可能会有灾难性的后果。
从宏观上来说,首先是减少线程数,规划好每个线程并将每个线程的休眠时间提高到最大,降低CPU在任务调度上的消耗。
其次就是重点优化,毕竟程序80%的时间都在运行20%的代码,只要在这20%的代码上功夫下足了,性能自然就能上去。
再次就是考量系统的性能,尤其是CPU和内存,是哪个比较吃紧,如果CPU比较吃紧,可以考虑用空间换时间的思路,否则就用时间换空间了。
微观一点来说,首先就是降低内存拷贝次数,因为一般的程序都会设计大量的I/O,所以降低内存拷贝可以省不少CPU;
其次是减少不必要的同步,比如使用了互斥锁,就将临界区缩到最小,只保护必要的数据,防止在线程互相等待上耗费不必要的CPU;
降低堆内存的使用频率,尤其是频繁地申请、释放内存,对CPU的消耗很大;
再次是条件语句中,将最容易命中的逻辑放在前面,越不易命中的往后排;
频繁使用的变量使用register来修饰;
使用高效率的I/O模型,比如网络使用epoll、聚散I/O等,磁盘I/O用DIRECT方式等;
频繁使用的函数,参数不要超过4个(因CPU而异,比如ARM的寄存器就比较多),超过4字节的参数(如结构体)传地址;
减少循环里面不必要的逻辑;
总之优化方法很多,有些是架构层面的优化,有些是设计层面的优化,有些是代码级的优化。
该回复于 10:56:30被版主删除
引用&76&楼&leeontyl&的回复:我觉得有一个原则,就是尽量不要考虑底层的优化,比如提高线程并发度,这种优化除非在设计前期就考虑使用,在后期采取这种办法优化可能会有灾难性的后果。
从宏观上来说,首先是减少线程数,规划好每个线程并将每个线程的休眠时间提高到最大,降低CPU在任务调度上的消耗。
其次就是重点优化,毕竟程序80%的时间都在运行20%的代码,只要在这20%的代码上功夫下足了,性能自然就能上去。
再次就是考量系统的性能……谢谢详细的指导
该回复于 10:36:50被版主删除
我也想知道,收藏了
路过,拿分,嘿嘿
有时更多的还是流程结构上的优化吧。算法上的优化一般使用的应该还是相对较少的。
学习了,关注。。。。。
好像有本书叫C++&effective的,可以看看
&我也正在找。有没有权威的人士给个答复。
学习学习!
建议看一下这本书&effective&C++
引用&32&楼&lixianmin&的回复:引用&15&楼&libinfei8848&的回复:
effective&系列丛书
描述的都是从语言级别上的优化
但我觉得算法优化才是王道
不过问题是一般来说程序的大多数地方不存在算法与否的问题,&只是简单的流程执行,因而很难做实质上的优化。从8:2法则的观点看,找到实际上消耗CPU最多的那部分代码优化之才是最关键的,但讽刺的是,这部分代码往往既不好找,不容易被优化
说的很对啊。有没有经典的书或别的资料什么的,介绍一下吧???最好能下载。
我记得有人列举过C++代码优化
你看下面的CSDN链接
http://dev.csdn.net/htmls/16/16067.html
据自己的使用经验看,可以提高一部分速度
不过以其花时间去优化代码,还不如使用简洁的算法,那才是根本!
好啊,学习了!!!
来学习一下!!
我也特别想知道啊
顶&受益匪浅
引用&7&楼&jarrylogin&的回复:有的,我记得微软专家写的一本书提到了:&多使用Windows&API
&&&&封装导致效率降低了吗?
该回复于 15:57:45被版主删除
好好学习,天天向上.....
1、分析速度瓶颈;
2、减少调用次数;(避免重复调用等)
3、优化函数实现;(涉及到&SSE&等)
4、使用&inline,避免函数调用的开销;
5、自己管理内存,避免内存分配的开销;
看看,我也想知道
设计好算法,然后直接用汇编写。
同求。这方面的书没看过比较系统和专业的
学习中。。。
自己继续顶,期待中
有的回复被删除了,分数没给上,抱歉了
先结了,以后自己学习中有问题再来问。
对已有的项目,先找出性能瓶颈,再做针对性的优化;
对还没有具体实施的项目,从设计时就多考虑大数据量、多并发的场景,首先在框架结构上保证尽可能的简单,然后再对各个模块做优化设计。
最近做的程序正需要
回复五种方法 让你的Python代码运行的更快
 作者: 凌燕 编辑:
  【IT168 编译】不论什么语言我们都需要注意性能优化问题,提高执行效率。选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足之处,那就是执行效率和性能不够亮。尽管Python从未如C和Java一般快速,但是不少Python项目都处于开发语言领先位置。    Python很简单易用,但大多数人使用Python都知道在处理密集型cpu工作时,它的数量级依然低于C、Java和JavaScript。但不少第三方不愿赘述Python的优点,而是决定自内而外提高其性能。如果你想让Python在同一硬件上运行得更快,你有两个基本选择,而每个都会有一个缺点:  ·您可以创建一个默认运行时所使用的替代语言(CPython的实现)——一个主要的任务,但它最终只会是CPython的一个简易替代者。  ·您也可以利用某些速度优化器重写现有Python代码,这意味着程序员要花更多精力编写代码,但不需要在运行时加以改变。  如何进行Python性能优化,是本文探讨的主题。下面是五个方法可以在某些方面提高Python代码的性能和执行效率。  PyPy  在选择CPython的简易替代语言时,PyPy无疑是最佳之选(如Quora就是由它编写而成)。由于与现有Python代码保持高度兼容性,PyPy也是默认程序运行时的一个很好选择。  PyPy使用了Just-in-Time(JIT)即时编译器,即动态编译器,与静态编译器(如gcc,java等)不同,它是利用程序运行的过程的数据进行优化,拥有同谷歌Chrome V8 JavaScript引擎相同的语言加速技术。本月初,最新版本PyPy 2.5即将发布,此版本会有一系列的性能改进,提供更全面的如NumPy的支持,用于加速Python性能的共享库。  Python 3.x必须由单独的PyPy3项目构建而成。不过,对于边缘语言特性爱好者来说,尽管预期支持3.3,但实际此版本最多仅支持Python3.2.4及以下版本。  相关链接:  Pyston  Pyston是一款Dropbox推出的新的基于JIT的Python实现,使用LLVM编译器实现代码解析与转换。与PyPy相比,Pyston仍处于初级阶段,目前最新版本为Pyston 0.2版,支持有限子集语言的相关特性。Pyston的主要工作包括支持语言的核心功能及提升关键指标性能到一个可接受的水平。不久后,Pyston就可以被认为是远程生产就绪语言。  相关链接:  Nuitka  Nuitka 是一个Python的替代品,一些团队正用它做完全的Python编译工具,并尝试将Python代码转译为其它可高速运行的编程语言。Nuitka(nuitka.net)可以将python代码转换为C++代码,然后编译为可执行文件,并通过直接调用python的api的方式实现从解析语言到编译语言的转换,并且在转换到C++的过程中直接使用python的解释器,可以保证100%的语法兼容。虽然这限制了它的可移植性,但不可否认这个转换的速度获得了肯定。  相关链接:  Cython  Cython是Python 的C语言扩展。准确说Cython是单独的一门语言,专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的编译器:先将 Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python可调用的模块。不过Cython的缺点是,你并不能真正编写Python代码,这样一来,现有代码将不会完全自动转移成功。  也就是说,Cython在提速方面有很大优势,它是一个用来快速生成Python扩展模块(extention module)的工具。而在Cython,C里的类型,如int,float,long,char*等都会在必要的时候自动转成python对象,或者从python对象转成C类型,在转换失败时会抛出异常,这正是Cython最神奇的地方。另外,Cython对回调函数的支持也很好。总之,如果你有写python扩展模块的需求,那么Cython真的是一个很好的工具。  相关链接:  Numba  Numba综合了前两种方法,是Cython的竞争项目。同样的,numba把Python源码通过LLVMPy生成JIT后的.so文件来加速。不同点在于,Numba是以JIT为主的,加速对源码的侵入性较小。而Cython则重点在加速高性能Python模块的开发上,不依赖LLVMPy项目。此外numba还很不成熟,目前兼容性相当差。  相关链接:  Python创始人Guido van Rossum坚信Python的许多性能问题可以归结为语言的使用不当。例如,对于CPU消耗过高的处理,可以通过一些方法来加速Python运行——使用NumPy、使用多处理器扩展、或借助外部C代码从而避免全局解释器锁(GIL)——Python缓慢的根源。但由于在Python中还没有可行的GIL替代语言,Python仍将在短期落后于其他语言——甚至可能更长时间。
IT168企业级
扫一扫关注
行车视线文章推荐现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高,想请大家谈谈还有哪些细节需要注意的,以及有哪些方法可以优化JAVA程序的执行效率和性能?
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
我补充一点,JDK1.5的concurrent包,我觉得非常好,里面包含常用的Map,List,还新增了Quene,针对并发处理,不仅提供了线程池等组件,还提供了弱同步、原子锁等,精巧而高效,可以减少系统的开销。
可以参考下这个,我再补充点:一、避免在循环条件中使用复杂表达式
在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。例子:
import java.util.Vclass CEL {
void method (Vector vector) {
for (int i = 0; i & vector.size (); i++)
// Violation // ...
class CEL_fixed {
void method (Vector vector) {
int size = vector.size ()
for (int i = 0; i & i++) // ...
二、为'Vectors' 和 'Hashtables'定义初始大小
JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原原先数组中的内容复制过来,最后,原先的数组再被回收。可见Vector容量的扩大是一个颇费时间的事。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小。例子:
import java.util.Vpublic class DIC {
public void addObjects (Object[] o) {
// if length & 10, Vector needs to expand
for (int i = 0; i& o.i++) {
// capacity before it can add more elements.
public Vector v = new Vector();
// no initialCapacity.}
更正:自己设定初始大小。
public Vector v = new Vector(20);
public Hashtable hash = new Hashtable(10);
三、在finally块中关闭Stream
程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。四、使用'System.arraycopy ()'代替通过来循环复制数组,例子:
public class IRB{
void method () {
int[] array1 = new int [100];
for (int i = 0; i & array1. i++) {
array1 [i] =
int[] array2 = new int [100];
for (int i = 0; i & array2. i++) {
array2 [i] = array1 [i];
// Violation
public class IRB{
void method () {
int[] array1 = new int [100];
for (int i = 0; i & array1. i++) {
array1 [i] =
int[] array2 = new int [100];
System.arraycopy(array1, 0, array2, 0, 100);
五、让访问实例内变量的getter/setter方法变成&final&简单的getter/setter方法应该被置成final,这会告诉编译器,这个方法不会被重载,所以,可以变成&inlined&,例子:
class MAF {
public void setSize (int size) {
private int _}
class DAF_fixed {
final public void setSize (int size) {
private int _}
六、避免不需要的instanceof操作如果左边的对象的静态类型等于右边的,instanceof表达式返回永远为true。例子:
public class UISO {
public UISO () {}}class Dog extends UISO {
void method (Dog dog, UISO u) {
if (d instanceof UISO) // always true.
System.out.println("Dog is a UISO");
UISO uiso =
if (uiso instanceof Object) // always true.
System.out.println("uiso is an Object");
删掉不需要的instanceof操作。
&coding-7 lang="as"&class Dog extends UISO {
void method () {
System.out.println ("Dog is an UISO");
System.out.println ("UISO is an UISO");
七、避免不需要的造型操作所有的类都是直接或者间接继承自Object。同样,所有的子类也都隐含的&等于&其父类。那么,由子类造型至父类的操作就是不必要的了。例子:
class UNC {
String _id = "UNC";}class Dog extends UNC {
void method () {
Dog dog = new Dog ();
UNC animal = (UNC)
// not necessary.
Object o = (Object)
// not necessary.
class Dog extends UNC {
void method () {
Dog dog = new Dog();
UNC animal =
Object o =
八、对于常量字符串,用'String' 代替 'StringBuffer'常量字符串并不需要动态改变长度。例子:
public class USC {
String method () {
StringBuffer s = new StringBuffer ("Hello");
String t = s + "World!";
更正:把StringBuffer换成String,如果确定这个String不会再变的话,这将会减少运行开销提高性能。九、在字符串相加的时候,使用 ' ' 代替 " ",如果该字符串只有一个字符的话例子:
public class STR {
public void method(String s) {
String string = s + "d"
// violation.
string = "abc" + "d"
// violation.
更正:将一个字符的字符串替换成' '
public class STR {
public void method(String s) {
String string = s + 'd'
string = "abc" + 'd'
尽量别用异常异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。 异常只能用于错误处理,不应该用来控制程序流程。
Try {} catch()要使用得当。
不要在循环中使用:Try {} catch() {}应把其放置在最外层。
尽量使用HashMap 和ArrayList ,除非必要,否则不推荐使用HashTable和Vector ,后者由于使用同步机制,而导致了性能的开销。
网站优化一般包含两方面的内容:&减小代码的体积&和&提高代码的运行效率&
一、不用new关键词创建类的实例用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。在使用设计模式(DesignPattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。
二、使用非阻塞I/O版本较低的JDK不支持非阻塞I/OAPI。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。JDK1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,需要支持非阻塞I/O的软件包。
三、慎用异常异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。
四、不要重复初始化变量默认情况下,调用类的构造函数时,Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。
五、尽量指定类的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。
六、尽量使用局部变量调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。
七、乘法和除法修改后的代码不再做乘以的操作,而是改用等价的左移的操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。
我说说我的一些经验吧,呵呵,我还只是个菜鸟,供大家参考1.如果程序中使用到循环的话,循环体中使用的对象最好在循环体外就定义好,避免重复定义2.不要太依赖java的GC机制,在跳出变量的作用范围外,手动回收内存。将变量置为null3.生成对象时,要分配给它合理的空间和大小 比如list,默认是size为10,当你程序中使用的空间大小大于10个时,尽量给它定义一个合适的初始化空间4.对于程序中经常使用但是又不常变化的对象或者数据,可以使用缓存。但是也不要为了使用缓存而用缓存5.数据库查询时,只是查询需要的数据,最好不要
select * from
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (13385) 次

我要回帖

更多关于 如何才能提高学习效率 的文章

 

随机推荐