字符串拼接操作
性能: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()
领取专属 10元无门槛券
私享最新 技术干货