JAVA代码优化

一、类、方法、变量尽量指定final修饰

public static void test(){
 final String x="1";
 final String y=x+"2";
 String z=x+y;
 System.out.println(z);
}

二、字符串拼接背后不一定是StringBuilder、上面代码没有用StringBuilder,下面代码使用了StringBuilder

public static void test(){
 final String x="1";
 String y=x+"2";
 String z=x+y;
 System.out.println(z);
}

三、尽量重用对象、不要循环创建对象:类似:for循环字符串拼接

public static void test(){
StringBuilder s=new StringBuilder();
for(int 1=0;i<10;i++){
s.append("C");
}
 System.out.println(s);
}

四、容器类初始化的时候指定长度

new ArrayList<String>(5);
new HashMap<String,String>(32);

五、使用Entry遍历Map

 for(Map.Entry<String,String> entry:map.entrySet()){
    String key =entry.getkey();
    String value=entry.getValue();
}

六、大数据复制使用System.arraycopy();

int[] is = new int[]{1,2,3,4,5}; 
int[] is2 = new int[is.length];
System.arraycopy(is, 0, is2, 0, is.length);
System.out.println(Arrays.toString(is2));

七、ArrayList随机遍历快,linkedList添加删除快
八、集合遍历尽量减少重复计算

for(int i=0,len=collection.size();i<len;i++){}

九、尽量使用基本类型而不是包装类型
十、不要手动调用System.gc()
十一、及时消除过期像的引用,防止内存泄漏
十二、尽量使用局部变量,减少变量的作用域
十三、尽量使用非同步容器ArrayList VS Vector
十四、尽量减少同步作用范围,synchronized方法 VS 代码块
十五、ThreadLocal缓存线程不安全的对象,SimpleDateFormat

public class SimpleDateFormUtils(){
   private static ThreadLocal<SimpleDateFormat> d=new ThreadLocal<SimpleDateFormat>(){
    protected SimpleDateFormat initialValue(){
       return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     }
   };
      public static void main(String[] args){
        d.get().format(new Date());
     }
}

十六、尽量使用懒汉加载或者饿汉加载
十七、尽量减少使用反射,如果使用反射,第一次用反射,然后加入缓存
十八、尽量使用连接池、线程池、对象池、缓存等

但是commons-pool提供了一套很好用的对象池组件,使用也很简单。
org.apache.commons.pool.ObjectPool定义了一个简单的池化接口,有三个对应实现,与我们的 Vector 这个集合不同的是,commons-pool提供了多样的集合,包括先进先出(FIFO),后进先出(LIFO)
StackObjectPool :实现了后进先出(LIFO)行为。
SoftReferenceObjectPool: 实现了后进先出(LIFO)行为。另外,对象池还在SoftReference 中保存了每个对象引用,允许垃圾收集器针对内存需要回收对象。
KeyedObjectPool定义了一个以任意的key访问对象的接口(可以池化对种对象),有两种对应实现。
GenericKeyedObjectPool :实现了先进先出(FIFO)行为。
StackKeyedObjectPool : 实现了后进先出(LIFO)行为。
PoolableObjectFactory 定义了池化对象的生命周期方法,我们可以使用它分离被池化的不同对象和管理对象的创建,持久,销毁。
BasePoolableObjectFactory这个实现PoolableObjectFactory接口的一个抽象类,我们可用扩展它实现自己的池化工厂。

十九、及时释放资源、I/O流、Socket、数据库连接、redis连接等
二十、谨慎使用异常、不要用抛异常来表示正常业务逻辑
二十一、String操作尽量用正则表达式

replace VS replaceAll
split

二十二、日志输出注意使用不同级别
二十三、日志中参数拼接使用占位符

log.info("o:"+o);不推荐
log.info("o:{}",o);推荐

二十四、不要在循环中使用try…catch…,应该把其放在最外层
二十五、乘法和除法使用移位操作

// 左移运算 times是2的幂
public long numberLeftCalculate(long number, int times)
{
	return number << times;
}
 
// 右移运算 times是2的幂
public long numberRightCalculate(long number, int times)
{
	return number >> times;
}

二十六、循环内不要不断创建对象引用
二十七、不要对数组使用toString()方法
二十八、不要对超出范围的基本数据类型做向下强制转型
二十九、公用的集合类中不使用的数据一定要及时remove掉
三十、把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+""最慢
三十一、不要创建一些不使用的对象,不要导入一些不使用的类
三十二、字符串变量和字符串常量equals的时候将字符串常量写在前面

String str = "123";
if ("123".equals(str))
{
    ...
}

三十三、不要将数组声明为public static final
三十四、减少使用new关键字创建对象
三十五、尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销
三十六、使用预编译 SQL、使用 Statement或者使用 PreparedStatement、使用 SQL 批处理
三十七、不要使用iterator()方法、使用原始类型和栈
待续…
<参考:https://blog.csdn.net/goldenfish1919/>
<参考:http://www.cnblogs.com/xrq730/p/4857820.html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值