JAVA代码性能优化

字符串拼接操作

性能:StringBuilder> StringBuffer > String

用+=拼接字符串+=右边的字符串对象均会在内存中生成新对象,耗费内存且运算速度缓慢。

StringBuilder非线程安全,性能优于StringBuffer,但实际应用为了线程安全建议使用StringBuffer。

应给StringBuffer设置一个合理的初始化容量值

字符串对象控制

采用String类的intern()方法将字符串加入到内存常量池,加入后的对象可直接用= =号而不需用equals()方法比较值,节省内存和运算时间

IO操作

尽量使用pool,buffer和cache如JDBCConnection Pool、SocketPool、ObjectPool和ThreadPool

BufferedFileOutputStream比BufferedFileWriter要快,因为FileWriter需要Unicode到Byte的转换

数据结构

线程结构:数组> ArrayList > Vector

随机存取:HashMap> Hashtable

ArrayList和HashMap非线程安全,但性能较高,不需要线程同步的环境应尽量使用。

HashMap的遍历效率。对HashMap中的key和value值对的遍历操作,有如下两种方法:

//第一种循环

Map paraMap = new HashMap();

SetappFieldDefIds = paraMap.keySet();

for(String appFieldDefId : appFieldDefIds) {

String[] values = paraMap.get(appFieldDefId);

}

//第二种循环

for(Entry entry : paraMap.entrySet()) {

String appFieldDefId = entry.getKey();

String[] values = entry.getValue();

}

第二种要优于第一种,因为get()方法要对HashMap多嵌套一次遍历

数据访问

复制大量数据时,应使用System.arraycopy()命令而不是循环。

尽量指定类的final修饰符

Java编译器会寻找机会内联(inline)所有的final方法(和编译器实现有关)。能使性能平均提高50%

尽量使用局部变量

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快;其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢

不要重复初始化变量

默认情况调用类的构造函数时,Java会把变量初始化成确定的值:

所有的对象被设置成null;

整数变量(byte、short、int、long)设置成;

float和double变量设置成0.0;

逻辑值设置成false。

用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用影响性能;对象使用完毕设置为null有利与提交GC回收命中率

减少对变量的重复计算

如:for(inti = 0;i

}

应替换为:

for(inti = 0,int len = list.size();i

}

采用延迟加载策略

在需要的时候才开始创建和赋值变量

如:

Stringstr = “aaa”;

if(i== 1) {

list.add(str);

}

应替换为:

if(i== 1) {

String str = “aaa”;

list.add(str);

}

乘除法

在保证代码可读性的前提下,采用位移代替乘除法可提高运算速度

资源控制

打开的资源要及时释放,无论是在正常分支还是异常分支和finally分支

缓存控制

用PrepareStatement代替createStatement

尽量使用RowSet,此外设置记录集读取缓存FetchSize和设置记录集读取方向FetchDirection对性能也有一定的提高(FetchSize设置为50到100)

ORACLE

在JAVA+ ORACLE的应用系统开发中,java中内嵌的SQL语句尽量使用大写的形式,以减轻ORACLE解析器的解析负担。

日期实例化

用Calendar.getInstance().getTime()代替newDate()

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424G02JQW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券