1. 代码优化,和性能优化不一样

代码优化的目标是:

  1. 减小代码的体积
  2. 提高代码运行的效率

  • 尽量重用对象

特别是 String 对象的使用,出现字符串连接时应该使用 StringBuilder。连接池、线程池

  • 尽可能使用局部变量

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快。其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。

  • 尽量减少对变量的重复计算

因为 array 其实是个特殊的 object,需要遍历 object 才知道长度:

for (var i = 0, length = list.length; i < length; i++)
  • 尽量采用懒加载的策略,即在需要的时候才创建
String str = "aaa";
if (i == 1)
{
  list.add(str);
}

建议替换为:

if (i == 1)
{
  String str = "aaa";
  list.add(str);
}
  • 乘法和除法使用移位操作
for (val = 0; val < 100000; val += 5)
{
  a = val * 8;
  b = val / 2;
}

用移位操作可以极大地提高性能,因为在计算机底层,对位的操作是最方便、最快的,因此建议修改为:

for (val = 0; val < 100000; val += 5)
{
  a = val << 3;
  b = val >> 1;
}

移位操作虽然快,但是可能会使代码不太好理解,因此最好加上相应的注释。

  • 循环内不要不断创建对象引用
for (int i = 1; i <= count; i++)
{
    Object obj = new Object();
}

这种做法会导致内存中有 count 份 Object 对象引用存在,count 很大的话,就耗费内存了,建议为改为:

Object obj = null;
for (int i = 0; i <= count; i++)
{
    obj = new Object();
}
  • 尽量在合适的场合使用单例

使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:

控制资源的使用,通过线程同步来控制资源的并发访问
控制实例的产生,以达到节约资源的目的
控制数据的共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信
  • 程序运行过程中避免使用反射

  • 使用数据库连接池和线程池

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

  • 使用带缓冲的输入输出流进行 IO 操作

带缓冲的输入输出流,即 BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,这可以极大地提升 IO 效率

  • 顺序插入和随机访问比较多的场景使用 ArrayList,元素删除和中间插入比较多的场景使用 LinkedList
Copyright © Guanghui Wang all right reserved,powered by GitbookFile Modified: 2019-08-25 13:56:34

results matching ""

    No results matching ""