- 浏览: 532503 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (377)
- J2EE (61)
- ORACLE (36)
- JS (15)
- EXT (0)
- win7 (12)
- TOMCAT (10)
- game (1)
- ie (5)
- etc (8)
- ibatis (3)
- ORACLE 客户端 (1)
- bat (3)
- 健康 (127)
- baby (4)
- html (12)
- myeclipse (16)
- 射手 字幕默认下载 位置 (1)
- office (0)
- car (2)
- xxx (1)
- python简介 (1)
- FusionCharts (1)
- dorado (4)
- english (3)
- weblogic (3)
- request/servlet (3)
- wsdl (1)
- offie2010 visio2010 下载 (1)
- nexus5 (0)
- chrome (3)
- ssi (2)
- 安卓 (3)
- nexus ipad (1)
- mysql (4)
- json (3)
- struts (6)
- datagrid (1)
- highcharts (1)
- tools (2)
- tool (1)
- spring3 (1)
- jedit (1)
- java (4)
- windows (1)
- easyui (2)
- 液晶显示器色温 (1)
- mybatis (1)
- where (1)
- sublime (1)
- spring4 (3)
最新评论
-
spring_springmvc:
如何在java Web项目中开发WebService接口,地址 ...
java 调用WebService服务接口 -
chenzheng8975:
阅
人生三大陷阱 -
ygbb007:
直接OD就能破解的
myBase Desktop 6.0 破解方法 -
lanlansnss:
直接删除nyfedit.ini文件即可
myBase Desktop 6.0 破解方法 -
yunzhu:
LZ写博客不太注重排版啊,排版不行别人没法看的
PermGen space
写程序如做人——提高程序性能的几点看法 收藏
评价一个程序就像评价一个人一样,除了要看他穿着是否得体外,还要去看他的内心是不否优秀。程序也不例外,评价程序是否良好,除了要看该程序代码是否可整洁、可运行、易懂外,还要考虑程序本身的性能是否良好。我就以我平时开发中代码编写时的一些经验做些总结,以供大家作为参考。
一、先编码,然后考虑程序的执行性能
在设计和开发一个项目的时候,我个人认为首先应该先把注意力放在集中编码上,以保证程序的可读性、整洁、可运行。只有当该程序可运行时,才可再从代码上进行优化调整,以提高程序的性能。否则,你也许所能得到的是时间上的浪费,甚至由于不必要的性能扩展而阻碍了项目进度的开发。通过剖析程序中的代码,你可能会发现最经常被执行的那部分代码,可能仅仅只有10%的可能的机率执行到那部份,而大多数的执行效率是没有什么意义的,这常常称为二八原理或一九原理,所以提高程序性能要尽量增加最经常被执行那部分代码的效率。提高效率最好的办法是:测试被更改代码确定的分支,然后,再通过比较更改前效率的差别来确定更改后是否对效率的提高有帮助,还是仅仅提高了效率却给代码带来了很大混乱,如果这样你就得不偿失了。当对代码的更改对效率提高不明显是还是维持代码的抽象性、复用性、可维护可扩展性比较好。
二、尽量使用面向对象的代码和增加第三方库的使用
通常,面向对象语言刻画客观系统较为自然,便于软件扩充与复用。面向对象语言往往在设计中趋向于更多的类、设计模式,采用MVC(Model—View—Controller)模式,来实现高内聚低耦合。使用第三方库可以减少代码的编写量,达到代码的统一。相反,如果是在手机移动领域(J2ME)开发中,由于受内存的限制,就要尽量少用MVC模式,因为这种设模式会使代码量呈指数性增长,有时在面对性能和内存时,你也许需要面向过程的方法来解决。另外在移动领域也要避免使用第三方API来存储空间和运行空间。如:在网络通讯时,使用自己定义的数据解析可能会提高程序的运行效率,但要避免使用一个更加抽象的工业化定义的数据通讯方法,如SOAP网络协议。因为这种协议不仅会增加程序的大小,也会带来解析和建立XML数据传递的额外过程。另外,移动领域为了提高网络通讯的性能,需要避免不断的从服务器中取回数据,要多利用缓存(请见wap开发中如何有效的利用缓存 )。
三、垃圾回收调优
作为一名Java程序员,应该知道垃圾回收器是Java语言中的一大优点,也正是由于这一大亮点,为我们程序员节省了不少代码量,而不用像C++语言那样调用delete方法来释放内存空间。但是,由于JVM对垃圾回收的不确定性,不知道何时才会对垃圾进行收集,所以会造成内存空间没有来得及释放,使得资源一直被占用,最后导致内存溢出。这种情况尤其在J2ME中更明显。因此我们可以通过一些措施来促进垃圾回收,如:将不再使用的对象置为NULL,特别是不再使用的Thread、重新利用对象池机制,从而避免重新创建对象。与可以通过调用System.gc()或者Runtie.getRuntime().gc()来强制执行垃圾回收(此种方法有时行不通)。
四、避免在循环条件中使用复杂表达式、进行同步和try/catch块
在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。如:int size = list.size () ; for (int i = 0; i < size;i++) {}比for (int i = 0; i < list.size (); i++) {}执行的更快
避免在循环条件中进行同步,是因为每一次循环都会有lock和Unlock的过程,这样会严重影响程序的执行效率。另在循环中倒数(递减)比正数(递增)要快且在循环体中实例化临时变量将会增加内存消耗
如果把try/catch块放入循环体内,会极大的影响性能,如果编译JIT被关闭或者你所使用的是一个不带JIT的JVM,性能会将下降21%之多。所以因将try/catch块移出循环
五、为'Vectors' 和 'Hashtables'定义初始大小
JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原先数组中的内容给复制过来,最后,原先的数组对象再被回收。可见Vector容量的扩大是一个颇费时间的事情。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小。
六、在finally块中关闭Stream流操作
程序中所有使用到的资源应当全都被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正常关闭。
七、尽量使用内置方法
要实现将数据从一个数组复制到另一个数组时,使用'System.arraycopy ()'代替通过来循环复制数组或自己创建新方法的效率快的多
八、让访问实例内变量的getter/setter方法变成”final”
简单的getter/setter方法应该被置成final,这会告诉编译器,这个方法不会再被重载。
九、避免不需要的instanceof操作
如果左边的对象的静态类型等于右边的,instanceof表达式返回永远为true。
十、使用移位操作来代替'a / b'或'a * b'操作
"/"或"*"是一个很“昂贵”的操作,使用移位操作将会更快更有效。
如:int i = a/4; 替换为int i = a>>2;
int j = b*4;替换为int j = b<<2;
十一、对于boolean值,避免不必要的等式判断
将一个boolean值与一个true比较是一个恒等操作(直接返回该boolean变量的值). 移走对于boolean的不必要操作至少会带来2个好处:
1)代码执行的更快 (生成的字节码少了5个字节);
2)代码也会更加干净 。
十二、用'StringTokenizer' 代替 'indexOf()' 和'substring()'
字符串的分析在很多应用中都是常见的。使用indexOf()和substring()来分析字符串容易导致StringIndexOutOfBoundsException。而使用StringTokenizer类来分析字符串则会容易一些,效率也会高一些。
十三、正确使用String与String Buffer
对于常量字符串,用'String' 代替 'StringBuffer' 对于需改变的变量用'StringBuffer 代替 'String'',
StringBuffer的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建StringBuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。
十四、尽可能的使用栈变量
如果一个变量需要经常访问,那么你就需要考虑这个变量的作用域了。static? local?还是实例变量?访问静态变量和实例变量将会比访问局部变量多耗费2-3个时钟周期。
十五、与一个接口 进行instanceof操作
基于接口的设计通常是件好事,因为它允许有不同的实现,而又保持灵活。只要可能,对一个对象进行instanceof操作,以判断它是否某一接口要比是否某一个类要快。
十六、其他编码建议:
1、如果只是查找单个字符的话,用charAt()代替startsWith()
2、在字符串相加的时候,使用 ' ' 代替 " ",如果该字符串只有一个字符的话
3、不要总是使用取反操作符(!),取反操作符(!)降低程序的可读性,所以不要总是使用
4、使用条件操作符(cond?0:1)代替"if...else" 结构
5、使用变量比使用数组更有效率
6、使用类似于x+=1替代x=x+1
因此,我们写代码时就像做人一样,不但要求代码整洁,还要注重代码的质量!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luosijin123/archive/2010/05/04/5556734.aspx
评价一个程序就像评价一个人一样,除了要看他穿着是否得体外,还要去看他的内心是不否优秀。程序也不例外,评价程序是否良好,除了要看该程序代码是否可整洁、可运行、易懂外,还要考虑程序本身的性能是否良好。我就以我平时开发中代码编写时的一些经验做些总结,以供大家作为参考。
一、先编码,然后考虑程序的执行性能
在设计和开发一个项目的时候,我个人认为首先应该先把注意力放在集中编码上,以保证程序的可读性、整洁、可运行。只有当该程序可运行时,才可再从代码上进行优化调整,以提高程序的性能。否则,你也许所能得到的是时间上的浪费,甚至由于不必要的性能扩展而阻碍了项目进度的开发。通过剖析程序中的代码,你可能会发现最经常被执行的那部分代码,可能仅仅只有10%的可能的机率执行到那部份,而大多数的执行效率是没有什么意义的,这常常称为二八原理或一九原理,所以提高程序性能要尽量增加最经常被执行那部分代码的效率。提高效率最好的办法是:测试被更改代码确定的分支,然后,再通过比较更改前效率的差别来确定更改后是否对效率的提高有帮助,还是仅仅提高了效率却给代码带来了很大混乱,如果这样你就得不偿失了。当对代码的更改对效率提高不明显是还是维持代码的抽象性、复用性、可维护可扩展性比较好。
二、尽量使用面向对象的代码和增加第三方库的使用
通常,面向对象语言刻画客观系统较为自然,便于软件扩充与复用。面向对象语言往往在设计中趋向于更多的类、设计模式,采用MVC(Model—View—Controller)模式,来实现高内聚低耦合。使用第三方库可以减少代码的编写量,达到代码的统一。相反,如果是在手机移动领域(J2ME)开发中,由于受内存的限制,就要尽量少用MVC模式,因为这种设模式会使代码量呈指数性增长,有时在面对性能和内存时,你也许需要面向过程的方法来解决。另外在移动领域也要避免使用第三方API来存储空间和运行空间。如:在网络通讯时,使用自己定义的数据解析可能会提高程序的运行效率,但要避免使用一个更加抽象的工业化定义的数据通讯方法,如SOAP网络协议。因为这种协议不仅会增加程序的大小,也会带来解析和建立XML数据传递的额外过程。另外,移动领域为了提高网络通讯的性能,需要避免不断的从服务器中取回数据,要多利用缓存(请见wap开发中如何有效的利用缓存 )。
三、垃圾回收调优
作为一名Java程序员,应该知道垃圾回收器是Java语言中的一大优点,也正是由于这一大亮点,为我们程序员节省了不少代码量,而不用像C++语言那样调用delete方法来释放内存空间。但是,由于JVM对垃圾回收的不确定性,不知道何时才会对垃圾进行收集,所以会造成内存空间没有来得及释放,使得资源一直被占用,最后导致内存溢出。这种情况尤其在J2ME中更明显。因此我们可以通过一些措施来促进垃圾回收,如:将不再使用的对象置为NULL,特别是不再使用的Thread、重新利用对象池机制,从而避免重新创建对象。与可以通过调用System.gc()或者Runtie.getRuntime().gc()来强制执行垃圾回收(此种方法有时行不通)。
四、避免在循环条件中使用复杂表达式、进行同步和try/catch块
在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。如:int size = list.size () ; for (int i = 0; i < size;i++) {}比for (int i = 0; i < list.size (); i++) {}执行的更快
避免在循环条件中进行同步,是因为每一次循环都会有lock和Unlock的过程,这样会严重影响程序的执行效率。另在循环中倒数(递减)比正数(递增)要快且在循环体中实例化临时变量将会增加内存消耗
如果把try/catch块放入循环体内,会极大的影响性能,如果编译JIT被关闭或者你所使用的是一个不带JIT的JVM,性能会将下降21%之多。所以因将try/catch块移出循环
五、为'Vectors' 和 'Hashtables'定义初始大小
JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原先数组中的内容给复制过来,最后,原先的数组对象再被回收。可见Vector容量的扩大是一个颇费时间的事情。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小。
六、在finally块中关闭Stream流操作
程序中所有使用到的资源应当全都被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正常关闭。
七、尽量使用内置方法
要实现将数据从一个数组复制到另一个数组时,使用'System.arraycopy ()'代替通过来循环复制数组或自己创建新方法的效率快的多
八、让访问实例内变量的getter/setter方法变成”final”
简单的getter/setter方法应该被置成final,这会告诉编译器,这个方法不会再被重载。
九、避免不需要的instanceof操作
如果左边的对象的静态类型等于右边的,instanceof表达式返回永远为true。
十、使用移位操作来代替'a / b'或'a * b'操作
"/"或"*"是一个很“昂贵”的操作,使用移位操作将会更快更有效。
如:int i = a/4; 替换为int i = a>>2;
int j = b*4;替换为int j = b<<2;
十一、对于boolean值,避免不必要的等式判断
将一个boolean值与一个true比较是一个恒等操作(直接返回该boolean变量的值). 移走对于boolean的不必要操作至少会带来2个好处:
1)代码执行的更快 (生成的字节码少了5个字节);
2)代码也会更加干净 。
十二、用'StringTokenizer' 代替 'indexOf()' 和'substring()'
字符串的分析在很多应用中都是常见的。使用indexOf()和substring()来分析字符串容易导致StringIndexOutOfBoundsException。而使用StringTokenizer类来分析字符串则会容易一些,效率也会高一些。
十三、正确使用String与String Buffer
对于常量字符串,用'String' 代替 'StringBuffer' 对于需改变的变量用'StringBuffer 代替 'String'',
StringBuffer的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建StringBuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。
十四、尽可能的使用栈变量
如果一个变量需要经常访问,那么你就需要考虑这个变量的作用域了。static? local?还是实例变量?访问静态变量和实例变量将会比访问局部变量多耗费2-3个时钟周期。
十五、与一个接口 进行instanceof操作
基于接口的设计通常是件好事,因为它允许有不同的实现,而又保持灵活。只要可能,对一个对象进行instanceof操作,以判断它是否某一接口要比是否某一个类要快。
十六、其他编码建议:
1、如果只是查找单个字符的话,用charAt()代替startsWith()
2、在字符串相加的时候,使用 ' ' 代替 " ",如果该字符串只有一个字符的话
3、不要总是使用取反操作符(!),取反操作符(!)降低程序的可读性,所以不要总是使用
4、使用条件操作符(cond?0:1)代替"if...else" 结构
5、使用变量比使用数组更有效率
6、使用类似于x+=1替代x=x+1
因此,我们写代码时就像做人一样,不但要求代码整洁,还要注重代码的质量!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luosijin123/archive/2010/05/04/5556734.aspx
发表评论
-
HttpClient4.X的代理密码
2018-07-11 23:48 869HttpClient4.X的代理添加实现(转自http://b ... -
Enable debug logging for this logger for a complete list of JARs that were scann
2018-06-28 21:59 1788修改EL表达式,例如"${owner.new}& ... -
job spring3--spring4
2017-12-28 09:21 455job spring3-->spring4 org ... -
java的(PO,VO,TO,BO,DAO,POJO)解释
2017-06-12 10:26 532java的(PO,VO,TO,BO,DAO,POJO) ... -
高內聚、低耦合。多聚合、少繼承
2017-05-22 15:52 794面向對象原則:高內聚、低耦合。多聚合、少繼承 2015-05 ... -
savesavesavesavesavesave
2017-05-18 17:24 487savesavesavesavesavesave uploa ... -
eclipse 图标的含义
2016-10-13 15:11 512... -
log4j-struts异常日志打印
2016-08-24 17:04 1059log4j.appender.myfile.layout.Co ... -
struts2 Action中获取request, response对象
2016-07-21 09:43 1168ajax不能完成文件下载, ... -
request和response的中文乱码问题
2016-03-04 10:39 1375request和response的中文乱码问题 request ... -
sun.misc.BASE64Encoder找不到jar包的解决方法
2015-06-29 15:10 842sun.misc.BASE64Encoder找不到jar包的解 ... -
jar 包 用途(jar功能对照表)
2015-04-08 16:07 1637jar包用途(jar功能对照表) axis.jar SOAP ... -
struts上传
2014-08-22 15:37 473jsp页面 <meta http-equiv=" ... -
java调用打印机打印自定义的图片
2014-08-19 16:03 3822package test; import java.awt. ... -
JAVA基类和派生类
2014-05-22 16:02 1293JAVA基类和派生类 从 ... -
web.xml配置详解
2014-02-20 08:56 8202007-10-16 17:12 Web.XML 配 ... -
不要使用sun.misc.BASE64Encoder
2014-02-18 10:10 1172一直以来Base64的加密解密都是使用sun.misc包下的B ... -
自定义Result
2014-01-13 10:18 748自定义Result 5.7.1 什么是自定义Result ... -
ant+javadoc生成API文档
2014-01-02 17:16 966ant+javadoc生成API文档 分类: ant 2006 ... -
ssi包下载
2013-12-27 10:15 967Spring官网改版后找了好 ...
相关推荐
Java代码优化是提升应用程序性能的关键步骤,尤其是在大型企业级应用或者高性能服务中。优化能够减少内存消耗,提高程序运行速度,降低CPU使用率,并改善整体的用户体验。在Java开发领域,有多种工具可以帮助开发者...
Java代码优化是对程序进行改进的过程,旨在提升程序的运行效率,减少资源的消耗。优化主要关注两个方面:减小代码体积和提高代码执行效率。在Java中,性能问题往往源于编程习惯而非语言本身。以下是一些针对Java代码...
### Java代码优化技巧详解 #### 一、引言 在软件开发过程中,为了提升应用程序的性能,我们需要对Java代码进行优化。这是因为计算机系统的资源(如内存、CPU时间、网络带宽等)是有限的,而优化的目标就是使程序...
【Java代码优化编程】 在Java编程中,代码优化是一个关键环节,目的是使程序在有限的资源下更高效地运行。优化主要包括两个方面:减小代码体积和提高代码执行效率。以下是一些关于如何提高Java代码效率的具体策略:...
JAVA代码优化 JAVA代码优化 JAVA代码优化 JAVA代码优化 JAVA代码优化
Java代码优化是一个持续的过程,它包含了许多细节和技巧,能够帮助开发者编写出更高效、更易于维护的代码。在这44条Java代码优化建议中,我们可以提炼出一些核心的知识点,为Java编程实践提供参考。 首先,关于为...
java代码优化 个人感觉这写的不错. 值得学习!
非常实用的java代码优化策略详解,从变量声明、初始化、字符串链接、异常处理、IO、数组等各个方面进行优化,非常有参考价值。
代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃...
以上就是关于Java代码重构、优化以及设计优化的一些关键点,这些知识不仅能提升代码质量,还能帮助开发者更好地应对项目中的各种挑战。通过深入学习《重构-改善既有代码的设计》这样的经典书籍,你可以进一步提升...
Java代码优化是提升软件性能和效率的关键步骤,尤其是在大型企业级应用中,高效的代码能够显著降低服务器资源消耗,提高用户体验。这份"java代码优化编程共11页.pdf.zip"压缩包很可能包含了一份详尽的Java代码优化...
Java代码优化是提升应用程序性能的关键步骤,特别是在大型企业级应用或者高并发系统中,优化能够显著提高系统效率,减少资源消耗。"Java代码优化方法大全共5页.pdf"可能是一份详细介绍了Java代码优化核心策略的文档...
本压缩包"java代码优化1.0版本.zip"包含了一份详细的优化指南——"java代码优化1.0版本.md",以下是基于这个主题的Java代码优化相关知识点的详细阐述。 1. **基本语法优化** - **避免使用冗余代码**:删除无用的...
Java代码优化是提升程序性能、减少资源消耗的关键环节。这份"java代码优化细节总结1.0版本.7z"压缩包包含了一份详细的Java代码优化指南,适用于开发者在编写和优化Java程序时参考。以下是根据标题、描述以及压缩包内...
这份"java代码优化总结1.0版本.zip"资源可能包含了关于如何提升Java程序效率的各种策略、技巧和最佳实践。以下是根据标题和描述推测出的一些核心知识点: 1. **基础优化概念**:首先,优化涉及到理解程序的运行时...