目录
4. 大数组复制用 System.arraycopy()方法
8. 尽量使用非同步的容器 ArrayList, 而不是Vector
9. 尽量减小同步作用范围, synchronized方法 VS 代码块
10. ThreadLocal缓存线程不安全的对象, SImpleDateFormat
14. 及时释放资源, I/O流, Socket, 数据库连接
1. 创建集合指定大小
List<String> idList = new ArrayList<>(10);
2. 集合遍历尽量减少重复计算
for(int i = 0, len = idList.size(); i < len; i++) {}
3. 使用Entry遍历Map
for(Map.Entry<String, String> entry : map.entrySet()){
String key = entry.getKey();
String value = entry.getValue();
}
4. 大数组复制用 System.arraycopy()方法
5. 尽量使用基本类型, 而不是包装类型
Integer i = 100; // 底层调用 Integer.valueof(i);
6. 及时消除过期对象的引用, 防止内存泄露
7. 尽量使用局部变量, 减小变量的作用域
8. 尽量使用非同步的容器 ArrayList, 而不是Vector
9. 尽量减小同步作用范围, synchronized方法 VS 代码块
10. ThreadLocal缓存线程不安全的对象, SImpleDateFormat
public class SimpleDateFormatUtil {
private static ThreadLocal<SimpleDateFormat> dateFormatHolder = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
public static void main(String[] args) {
dateFormatHolder.get().format(new Date());
}
}
11. 尽量使用延迟加载
public class Singleton {
private Singleton(){}
public static class SingletonHolder {
private static Singleton instance = new Singleton();
}
public static Singleton getInstance {
return SingletonHolder.instance;
}
}
12. 尽量减少使用反射, 要去加缓存
13. 尽量使用连接池, 线程池, 对象池, 缓存
14. 及时释放资源, I/O流, Socket, 数据库连接
15. 慎用异常, 不要用抛异常来表示正常的业务逻辑
16. String 操作尽量少用正则表达式
17. 日志输出注意使用不同的级别
18. 日志中参数拼接使用占位符
log.info("orderId:{}", orderId);