尽量指定类、方法的final修饰符
Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。尽量重用对象
比如String, 尽量使用Stringbuilder/StringBuffer尽量使用局部变量
及时关闭流
尽量减少对变量的重复计算
for (int i = 0; i < list.size(); i++)
{...}
建议替换为:
int lenght = list.size();
for (int i = 0, i < length; i++)
{...}
- 尽量采用懒加载的策略,即在需要的时候再创建。
String str = "aaa";
if (i == 1)
{
list.add(str);
}
建议替换为:
if (i == 1)
{
String str = "aaa";
list.add(str);
}
慎用异常
不要在循环中使用try….catch ,应将try放在循环外层
如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度
当复制大量数据时,使用system.arraycopy() 命令,
乘法和除法使用移位操作
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();
}
这样的话,内存中只有一份Object对象引用,每次new Object()的时候,Object对象引用指向不同的Object罢了,但是内存中只有一份,这样就大大节省了内存空间了
尽量在合适的地方使用单例
单例主要适用以下方面
(1) 控制资源的使用,通过线程同步来控制资源的并发访问
(2) 控制实例的产生,以达到节约资源的目的
(3) 控制数据的共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信尽量避免随意使用静态变量
当某个对象被定义为static的变量所引用,那么gc通常是不会回收这个对象所占有的堆内存的使用同步代码块替代同步方法
这点在多线程模块中的synchronized锁方法块一文中已经讲得很清楚了,除非能确定一整个方法都是需要进行同步的,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响了代码执行效率。将常量声明为static final,并以大写命名
不要创建一些不使用的对象,不要导入一些不使用的类
程序运行过程中避免使用反射
使用带缓冲的输入输出流进行IO操作
顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList
字符串变量和字符串常量equals的时候将字符串常量写在前面