java代码性能优化三_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java代码性能优化三

java代码性能优化三

 2012/4/15 1:22:00  qcyycom  程序员俱乐部  我要评论(0)
  • 摘要:使用局部缓存在DALC方法中,很多地方需要对返回的集合进行处理(设置每个实体相关的类名、包名、安全域名等),每个名字都需要从模型缓存中查询,如果集合中相当一部份名字是重复的(很多情况下都是如此),每次都查询是没有必要的。通过在方法中添加局部缓存,这类操作的性能提升明显。比如:BusinessAttributeDALC.selectAllAttrsOfTheClass()取类型的所有属性,在取得属性后会调用convertBusinessAttributes为属性设置:父属性名、包名
  • 标签:Java 代码 性能优化 优化

使用局部缓存

在?DALC?方法中,很多地方需要对返回的集合进行处理(设置每个实体相关的类名、包名、安全域名等),每个名字都需要从模型缓存中查询,如果集合中相当一部份名字?是重复的(很多情况下都是如此),每次都查询是没有必要的。通过在方法中添加局部缓存,这类操作的性能提升明显。

如:BusinessAttributeDALC.selectAllAttrsOfTheClass()?取类型?的所有属性,在取得属性后会调用convertBusinessAttributes?为属性设置:父属性名、包名、安全域名等相关名称,原实现?是对每个属性分别查询模型缓存,现在改成局部缓存方式(这些值中有很多是重复的)。方法调用时间减少一半。本机?执行BusinessAttributeDALC.selectAllAttrsOfTheClass()?,mw112?数据库,共1000?个属性记录,目标类型上有95?个属性,没有调优之前?需要65MS?,调优后只需?要33MS?,其中查询BusinessAttribute?缓存需要28MS?。

同时还发现,有些对模型的查询方法其实可以使用主键,但仍使用Condition?去查找,结果就是对模型缓存的遍历。

减少方法调用的层次???

????????在代码中发现当需要对集合进行处理时,会在循环中调用单对象?处理方法(方法代码可能只有?2-3行,但会有多个?new DALC?操作),其实这样的效率是比较低的。这里单对象?方法中的?DALC?不能被重用,导致?JVM?需要创建大量的?DALC?实例,之后再回收。

????????调用层次过多本身就有一些性能问题。每层方法的调用都需要?Stack?操作。

尽量减少使用?Reflect

????????Reflect?一方面性能比较低,另一方面会降低代码的可读性。

????????接口方法调用的性能明显高于?Reflect?。

????????比如对目标数组使用?Array?类的方法进行遍历时,性能是比较低的。

正确的数组复制方法

????????在对数组进行复制(全部或部份)时,尽量使用?System.arrayCopy?方法而不是进行遍历赋值。数组元素个数越多差别越明显,?System.arrayCopy?性能基本无变化(使用?Native Method?实现)。

????????DataRow.clone?会对?byte[]?进行?clone?,如果这个数组比较大(?BLOB?字段),改成?System.arrayCopy比遍历性能高的多。

合理重用对象

????????对象的创建比较耗用资源,可以合理地重用一些对象,比如模型服务中有很多?Handler?,如果有必要可以设计成可重用的?Handler?,通过一个?clear()?清理所有中间数据,通过?init(…)?重新初始化数据。

????????这里的重用是指在一次串行调用的循环中,不必每次都重新创建实例。

????????重用的好处主要包括:减少创建对象的个数;减轻?GC?的压力;

?

?

?

发表评论
用户名: 匿名