Effective Java

性能问题应该是写代码都应该考虑的事情。Android主要使用Java语言,因此我们写的Java代码的性能优化问题应该就是一个通用的性能问题了。Android虽然支持Native Code,但是不推荐为了性能(主要是速度)而使用,因为实际上Native Code在性能上并不能有多大的改观,反而在开发难度上、移植上给自己挖了一个大坑。

讨论Java代码性能方面有本书《Effective Java》,可以从下面的路径下载http://cyclo.ps/books/Prentice.Hall.Effective.Java.2nd.Edition.May.2008.pdf

编写有效代码的两个基本规则是:

1. 不去编写没有必要的代码。考虑代码的复用,和设计的合理性。

2. 分配内存只是在没有其他办法的情况下。内存泄露、内存不足导致分配失败是最常见的一类错误。

高效Java代码的一些基本规则:

1. 避免创建不需要的对象。

一些实例:
a. 存在字符串连接的时候,不用使用String,使用StringBuffer。
b. 优先使用原生类型,比如用int而不是Integer。
c. 如果存放少量数据,使用数组而不是ArrayList,HashMap等容器。

2. 优先使用static,避免使用virtual

调用static函数并不需要对象,可以直接使用。一种极限的情况,将所有不访问类的内部成员的函数均声明为静态函数?虚函数的访问需要编译器推测对角的实际类型,然后调用真正的实现函数,花费的时空开销很大。

3. 类内部避免使用Getter/Setter

函数调用的开销比直接访问成员要大。Getter/Setter从Bean出现后就开始泛滥了。

4. 用final和static声明常量

对于普通成员和静态成员,Java把它们都处理为类的成员。如果添加上finnal表示这个变量永远不会被改变,数据被存放到直接使用的地方。

5. 使用增强的循环

Java使用循环有好几种方式:

a. 普通for(;;)
b. 迭代器,
c. for each

避免在循环内重复求值运算,重复创建临时变量。优先使用迭代器,因为迭代器做了许多访问的优化,避免自己写循环的性能损失。

6. 避免使用私有内部类。

Java允许内部类访问外部类的私有成员。为了达到这一目的,编译器隐含地为外部类构造了访问函数。这相当于通过Getter/Setter来访问成员,相比于直接访问数据成员要慢些。如果解决这个问题是个平衡问题,访问权限问题。

7. 浮点数使用

double和float

8. 避免闭门造车

Android的类库与我们经常使用的类库存在一些差异,很多开源的类库已经实现了一些我们想要的功能,尽量去使用已经存在的类。

 

你可能感兴趣的:(Effective Java)