谷歌官方建议笔记——性能

来源:互联网 发布:ubuntu 14.04安装分区 编辑:程序博客网 时间:2024/05/22 03:24

原文

  • 尽量减少对象的创建,从而减少GC次数。包括:

    • 减少不必要的中间变量:包括函数局部变量、返回值等
    • 对于String,最好使用substring,此时新的String是原始数据的子集的引用
    • int比Integer要快
    • 对于一个Bean的数组,可以转变为多个基本类型的数组的集合,减少对象的创建,可以参考ArrayMap
  • 如果不需要访问对象的成员变量,尽量使用static方法。会有15%-25%的性能提升

  • 对于基本类型常量,使用static final可以减少一次对象初始化
  • 在不用proguard的情况下,在对象内部尽量不用getter/setter,而是直接访问成员变量。getter/setter只是对外接口。没有JIT,能快3倍,有JIT能快7倍。Proguard会自动将getter/setter inline化
  • 对于一般for循环,尽量使用for-each。对于数组,尽量使用手写的int i循环。但是要把数组长度提取出来作为局部变量
  • 对于内部类访问外部类的private变量,实际上是VM为外部类的成员变量生成了一系列权限为package的getter/setter方法,供内部类使用。此时最佳实践是将外部类成员变量的访问权限设置为package,供内部类直接使用
  • 经验上讲,float比int慢两倍。部分处理器上除法可能没有硬件支持
  • Iterator(以及使用Iterator的foreach)会严重拖慢代码运行速度,ArrayList上会有2倍的性能差
  • Invalidate尽量传入Rect,onDraw时尽量调用Canvas.clipRect(),查看是否需要重绘Canvas.quickReject()
  • 在创建对象时,可能由于内存不足被GC阻塞
  • 对于autoboxing和unboxing,会有时间和空间的额外开销,对于Map类的,可以转用SparseXXXMap
0 0