java程序优化,集思广益,工作中深有体会 在工作中发现 由于程序优化不好所以 做的项目总出现 慢,内存溢出的问题 所以深刻感受到不是实现效果就完了,更正要的是要有经得起考验的程序。大家都来谈谈吧!请老紫竹支持! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【maojiaqiu】截止到2008-06-27 10:03:47的历史汇总数据(不包括此帖):发帖数:19 发帖分:260 结贴数:17 结贴分:240 未结数:2 未结分:20 结贴率:89.47 % 结分率:92.31 % 楼主加油 比如说 用StringBuffer 要不用String+= 好! String sentence = "";for( int i = 0; i < wordArray.length; i++ ) {sentence += wordArray[ i ];}优化为StringBuffer buffer = new StringBuffer( 500 );for( int i = 0; i < wordArray.length; i++ ) {buffer.append( wordArray[ i ] );}String sentence = buffer.toString( ); 用 乘法n*m 不如用位移n<<m 还有1.tomcat 在什么样情况下 才回收内存2.jsp中使用String 用完是否 赋null 1.如果没有线程同步,最好习惯用StringWriter而不是StringBuffer,因为,StringBuffer是线程安全的,所以,效率会稍微低一点.当然JDK5以后,还提供了StringBulder,这个类要比StringWriter更好用一些,当然也不是线程安全的.2.数据库查询的结果集处理,我们对数据库操作时,可能会针对里面的数据做处理性质的迁移.一般都是先Select一把,然后把结果集的内容处理,最后Insert或Update回数据库.这个是效率最低下的.无论是否使用Hibernate都很低下.当然,最好是写一个存储过程来完成这件事,我们只是调用一下,触发这个事件就可以了.如果非要自己写程序完成,那么,一定要注意,你在Select的时候,不要将所有数据一次性全都查询出来,要按行数分次处理否则很容易将内存暴掉.因为,这些数据即使你已经处理完了,但是,对象有可能被Map或者Collection的某个对象所引用,这样JVM就无法进行回收.3.程序慢,要找到瓶颈在哪里,这样才能解决.一般是三大部分,一个CPU占用率过高;一个是硬盘访问过于频繁;一个是网络拥塞.a.CPU占用又可以分三个部分,一个是tomcat占用过高;一个是数据库占用过高;另一个是其他程序(如远程控制程序)占用过高...tomcat过高,最有可能是处理数据算法效率太低.数据库占用过高,最有可能的是频繁对一个已经很长的表进行了操作(可以通过建临时表来进行缓解,效果不错).其他程序想办法不使用这些程序或再找个空闲的服务器来run这些程序.b.一般硬盘访问频繁,CPU是不会过高的.比如有一个循环程序,因数据不合要求总是打印日志,而日志就写在文件里,这样,由于写日志文件而使得处理线程进展缓慢.可以通过对数据进行预处理,来缓解硬盘访问频繁的状况,或者根据特点采用缓冲区,多线程写文件等技术来解决这样的问题.c.网络拥塞,看看是否有网络攻击(DOS或者ARP之类的),或者增加带宽.如果是由于联通和电信的互访造成慢的,那么可以考虑使用铁通之类的节点进行中转,效果还算可以. 本人,新手,关于swing的一个问题,求解! 求关于下列几行代码的解释 一个关于位移的小问题 特别急!!求助!!!这样的访问如何实现??(jsp+servlet) JTabbedPane插入相同容器导致的问题 这个程序我想菜单中选择图片1的时候显示001.jsp但是显示不出来,请帮忙看下,谢谢 java容易混淆的问题 请问:如何获得当前路径和当前系统时间 如何把网络文件下载到本地 怎样实现这个功能???在线等待。。。。 一道简单的java习题? 跪求关于java .swing中的打印的代码
楼主【maojiaqiu】截止到2008-06-27 10:03:47的历史汇总数据(不包括此帖):
发帖数:19 发帖分:260
结贴数:17 结贴分:240
未结数:2 未结分:20
结贴率:89.47 % 结分率:92.31 %
楼主加油
for( int i = 0; i < wordArray.length; i++ ) {
sentence += wordArray[ i ];
}
优化为
StringBuffer buffer = new StringBuffer( 500 );
for( int i = 0; i < wordArray.length; i++ ) {
buffer.append( wordArray[ i ] );
}
String sentence = buffer.toString( );
1.tomcat 在什么样情况下 才回收内存
2.jsp中使用String 用完是否 赋null
当然JDK5以后,还提供了StringBulder,这个类要比StringWriter更好用一些,当然也不是线程安全的.2.数据库查询的结果集处理,我们对数据库操作时,可能会针对里面的数据做处理性质的迁移.一般都是先Select一把,然后把结果集的内容处理,最后Insert或Update回数据库.这个是效率最低下的.无论是否使用Hibernate都很低下.当然,最好是写一个存储过程来完成这件事,我们只是调用一下,触发这个事件就可以了.如果非要自己写程序完成,那么,一定要注意,你在Select的时候,不要将所有数据一次性全都查询出来,要按行数分次处理否则很容易将内存暴掉.因为,这些数据即使你已经处理完了,但是,对象有可能被Map或者Collection的某个对象所引用,这样JVM就无法进行回收.3.程序慢,要找到瓶颈在哪里,这样才能解决.一般是三大部分,一个CPU占用率过高;一个是硬盘访问过于频繁;一个是网络拥塞.
a.CPU占用又可以分三个部分,一个是tomcat占用过高;一个是数据库占用过高;另一个是其他程序(如远程控制程序)占用过高...tomcat过高,最有可能是处理数据算法效率太低.数据库占用过高,最有可能的是频繁对一个已经很长的表进行了操作(可以通过建临时表来进行缓解,效果不错).其他程序想办法不使用这些程序或再找个空闲的服务器来run这些程序.
b.一般硬盘访问频繁,CPU是不会过高的.比如有一个循环程序,因数据不合要求总是打印日志,而日志就写在文件里,这样,由于写日志文件而使得处理线程进展缓慢.可以通过对数据进行预处理,来缓解硬盘访问频繁的状况,或者根据特点采用缓冲区,多线程写文件等技术来解决这样的问题.
c.网络拥塞,看看是否有网络攻击(DOS或者ARP之类的),或者增加带宽.如果是由于联通和电信的互访造成慢的,那么可以考虑使用铁通之类的节点进行中转,效果还算可以.