您的位置:首页 > 编程语言 > Java开发

java性能优化

2017-07-18 09:58 148 查看
尽量指定类、方法的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的时候将字符串常量写在前面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: