java编写提升性能的代码

1、ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现,既兼顾安全,又保证高并发,HashMap的升级版本,建议使用。

2、List中的三种循环方法:迭代循环、for-each循环、for循环,其中for循环效率最高,迭代循环其次,这下你应该知道选择哪一个了吧。

3、使用二元操作替代if-else,代码简洁,如:

int number >= 20 ? 20 : (number > 1) ? Integer.highestOneBit((number - 1) << 1) : 1;

4、慎用String.split()方法,效率极其低下,可以考虑indexOf()、substring()组合,效率高不止多少倍。

5、new ConcurrentHashMap<K,V>(int capacity),new ArrayList<K,V>(int capacity),如果事先知道多少元素,加个初始参数,减少集合内部的移位操作,提高性能。

6、最后不要用反射,太耗内存,而且效率也不高,如果非要使用,建议用开源commons-beanutils-1.7.0.jar包里面的PropertyUtils类。

7、数据库表数据不经常修改的,用缓存机制,不需要每次都进行数据库连接,节省时间,可以加定时刷新功能,来同步数据库表数据。

8、如果要经常操作字符串,建议StringBuffer(线程安全)和StringBuilder(线程不安全)取代String。

9、尽量减少对象的创建,考虑使用单例模式,资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置,还有就是控制资源的情况下,方便资源之间的互相通信。如线程池等。

10、程序中使用到的资使用完之后要记得释放。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。

11、使用'system.arraycopy ()'代替通过来循环复制数组。

12、简单的getter/setter方法应该被置成final,这会告诉编译器,这个方法不会被重载,所以,可以变成”inlined” 。

13、如果只是查找单个字符的话,用charat()代替startswith() 。

14、使用移位操作来代替'a / b'操作 。

15、把try/catch块放入循环体内,会极大的影响性能,如果编译jit被关闭或者你所使用的是一个不带jit的jvm,性能会将下降21%之多。

16、如果一个变量需要经常访问,那么你就需要考虑这个变量的作用域了。static? local?还是实例变量?访问静态变量和实例变量将会比访问局部变量多耗费2-3个时钟周期。

17、在java+Oracle的应用系统开发中,java中内嵌的SQL语言应尽量使用大写形式,以减少Oracle解析器的解析负担。

19、过分的创建对象会消耗系统的大量内存,严重时,会导致内存泄漏,因此,保证过期的对象的及时回收具有重要意义。
JVM的GC并非十分智能,因此建议在对象使用完毕后,手动设置成null。

20、不要重复计算,特别是size()方法。

比如:

for(int i=0;i<list.size();i++) 

应修改为

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

21、采用在需要的时候才开始创建的策略

例如:

String str="abc";if(i==1){ list.add(str);}

应修改为:

if(i==1){String str="abc"; list.add(str);}

22、HaspMap的遍历。

Map<String, String[]> paraMap = new HashMap<String, String[]>();
for( Entry<String, String[]> entry : paraMap.entrySet() )
{
    String appFieldDefId = entry.getKey();
    String[] values = entry.getValue();
}

利用散列值取出相应的Entry做比较得到结果,取得entry的值之后直接取key和 value。

23、数据转换成列表:Collections.addAll(aa, bb);

//aa:表示list<String>对象,bb表示数组对象

 
原文地址:https://www.cnblogs.com/nizuimeiabc1/p/4254121.html