常用代码优化方法

  • 尽量重用对象,不要循环创建对象,比如在for循环中进行字符串拼接,或者用原型模式提升性能;
  • 容器类初始化的时候指定长度,比如List<String> collection = new ArrayList<String>(5);,ArrayList底层使用Object数组实现的,默认为空,添加元素时如果容量不够就涉及扩容操作,而扩容操作就涉及数组的复制操作;HashMap底层也是数组,每个数组元素指向一个链表,当链表长度超过一定值时变成红黑树,故HashMap初始化的时候也要指定初始大小,避免resize()的时候的重哈希;
  • ArrayList随机访问快,LinkedList添加删除快;LinkedList是一个双向链表;
  • 使用Entry遍历Map;
for(Map.Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
}
  • 大数组拷贝用System.arraycopy,其底层是用Native代码做的,就是C代码做的;
  • 尽量使用基本类型而不是包装类型;
  • 不要手动调用System.gc(),其作用是通知垃圾收集器做一个FullGC,通过GC调优而不是这种方式;
  • 及时消除掉过期对象的引用,防止内存泄漏;
  • 尽量使用局部变量,减小变量作用域;
  • 尽量使用非同步的容器,比如ArrayList VS Vector;
  • 尽量缩小同步作用范围,比如synchronized方法 VS synchronized代码块;
  • 使用ThreadLocal缓存一些线程不安全的对象,比如SimpleDataFormat,其比较复杂,创建的时候比较耗资源,不用每次用的时候都new一个,可以缓存在ThreadLocal中,成为一个线程单例;
import java.text.SimpleDateFormat;
import java.util.Date;

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());
    }
}
  • 尽量使用延迟加载;
  • 尽量减少使用反射,如果必须要用,加缓存,只在第一次需要反射的时候反射,之后将其加入一个缓存,以后再用从缓存中取;
  • 尽量使用连接池,线程池,对象池,缓存;
  • 及时释放资源,I/O流,Socket,数据库连接;
  • 慎用异常,不要用抛异常的方式表示正常的业务逻辑,异常也是一个比较重的对象;
  • String操作的时候,尽量少用正则表达式,功能强大但是性能很低,能用replace就不用replaceAll;
  • 日志输出注意使用不同的级别;
  • 日志中,参数拼接使用占位符;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 9,873评论 1 14
  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 5,924评论 0 47
  • Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难。随着10多年Java平台的改...
    程序员技术圈阅读 10,245评论 0 65
  • 加粗 标题 二级标题 斜体
    JackDiJ阅读 1,261评论 0 0
  • 题目如下:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一...
    李红斌_三月阅读 1,696评论 1 0