代码优化

156 阅读3分钟
1. 尽可能使用局部变量 * 调用方法时传递参数以及在调用中创建的临时变量都保存在栈中,速度较快 * 像 静态变量 实例变量 大对象等都在堆中 速度较慢

2. 尽量减少对变量的重复计算

3. 尽量采用懒加载的策略

4. 尽量重用对象

5. 及时关闭流

6. 慎用异常 * 异常对性能不利,抛出异常先要创建一个新的对象,throwable接口的构造函数调用名为fillInStackTrace()本地同步方法 * 此方法检查堆栈,收集调用跟踪信息,只要有异常就抛出.(异常只能用于错误处理,不可用来控制程序流程)

7. 不要在循环中使用 try...catch...

8. 容器初始化 尽可能指定长度 如:new ArrayList<>(128); new HashMap<>(256);等避免自动扩容带来性能消耗

9. 当复制大量数据时, 使用System.arraycopy()命令

10. 基于效率和类型检查的考虑,应该可能使用array ,无法确定数组大小时再使用ArrayList

11. 尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用 * Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销

12. 不要将数组声明为public static final * 将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变

13. 尽量在适合的场景使用单例 * 使用单例可减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有场合都适用单例 可使用单例的场景如下:

1> 控制资源的使用,通过线程同步来控制资源的并发访问

2> 控制实例的产生,以达到节约资源为目的

3> 控制数据的共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信

14. 尽量避免随意使用静态变量 当某个对象定义为static的变量所引用,那么gc通常不会回收这个对象所占有的堆内存

15. ArrayList 随机遍历快,linkedList 添加/删除快

  ArrayList 基于数组 有下标,遍历较快,

linkedList 基于链表 添加/删除只需改变指向就好

顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList

16. 尽量使用同步代码块代替同步方法

17. 不可创建一些不使用的对象,不要导入一些不使用的类

18. 程序运行过程中避免使用反射,(反射功能强大但效率不高)

19. 使用数据库连接池 和线程池 这两个池都是用于重用对象的,前者可避免频繁打开和关闭连接,后者可避免频繁创建和销毁线程

20. 尽量使用带缓冲的输入输出流进行IO操作 * 带缓冲的输出流: 即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream这可极大地提升IO效率 21. 把一个基本数据类型转为字符串,基本数据类型.toString()最快 String.valueOf(数据)次之, 数据 + ""最慢

22. 遍历Map 最有效率的方法

Map<String,String> map = new HashMap<>();

for (Map.Entry<String,String> entry : map.entrySet())

{

      String key = entry.getKey();

     String value = entry.getValue();

}

或者

Map<String,String> map = new HahsMap<>();

Set<Map.Entry<>String,String> entry = map.entrySet(); Iterator<Map.Entry<String,String>> iter = entry.iterator();

while(iter.hasNext())

{

    Map.Entry<String,String> entry = iter.next();

}

23. 对资源的close()建议分开操作