java项目代码优化

Java项目代码优化

(1)避免创建过多的对象,java自带GC机制,不需要开发人员关心对象的回收机制,但大量临时对象的产生也会导致系统进行频繁的GC操作,从而导致系统性能问题。
A a = new A();
if(i1){
list.add(a);
}
可以改为:
if(i
1){
A a = new A();
list.add(a);
}

(2)避免对变量的重复计算。
for(int i=0;i<list.size();i++)
可以改为:
for(int i=0,len=list.size();i<len;i++)

(3)合理创建HashMap,HashMap是常用到的集合之一,合理利用HashMap的构造函数。
public HashMap(int initialCapacity, float loadFactor);
默认情况下initialCapacity=16,loadFactor=0.75,当Hash Map里的容量超过16*0.75时,Hash Map会进行一次双倍容量的扩容操作。当可以通过业务判断出创建的Map所需容量大小是,可以创建的时候指定容量。同样,如果用到HashTable,vector等集合一样。

(4)尽量避免随意使用静态变量,当某个对象被static修饰,jvm一般是不会对这样的对象进行GC的,该对象会常驻内存。
public class A{
private static B b = new B();

}

(5)final修饰符,被final修饰的方法不会被子类重写,调用被final修饰的方法效率更高,常见的getter/setter方法可以设置成final。
public class A{

private int id;

public int getId() {return id;}
public void setId(int id) {this.id = id;}

}
可以改为
public class A{

private int id;

final public int getId() {return id;}
final public void setId(int id) {this.id = id;}

}

(6)尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快;静态变量,实例变量在堆中生成,相对较慢。

(7)尽量不要使用finalize方法,java提供该方法可以让开发人员手动进行GC,但是jVM的GC工作量很大,尤其是回收年轻代(Young)时,大都会引起STW,导致程序暂停,所以再选择手动使用finalize方法进行垃圾回收,会导致GC负担更大,程序运行效率更差。

(8)在线程安全的前提下尽量使用HashMap,Array List等非线程安全的集合,Hash Table,ConcurrentHashMap,Vector等线程安全的集合由于内部实现采用了同步机制,会导致效率更慢。

(9)释放资源的操作尽量在finally语句块中执行,不管程序运行结果如何,finally语句块都会执行,不会出现资源未释放的情况。

(10)String,StringBuffer,StringBuilder,如果存在字符串拼接的情况尽量使用StringBuilder和StringBuffer来进行,这样不会产生新的对象,此外StringBuffer是线程安全的,同样内部实现采用了同步机制,StringBuilder是线程不安全的,效率更高,使用StringBuilder和StringBuffer尽量确定大小,默认是采用一个大小16的字符数据来存储字符串,超过这个长度之后会产生数组的复制等操作
String str = “hello”;
str += “world”;//产生一个新对象,这时jvm中其实存在两个对象,即“hello”和“helloworld”

(11)尽早释放无用对象的引用,JVM标记无用对象采用的是可达性分析算法,通过GC Roots对象是否可以引用关联到该对象,关联不到该对象,则该对象为需要回收的对象,早些释放引用,就可以早点回收该对象占用的内存空间,方法局部引用的对象可以不做处理
Public void test(){

Object obj = new Object();
……
Obj=null;
}
这种可以不用处理,因为方法结束了,obj对象也就变成了需要回收的对象了

Public void test(){

Object obj = new Object();

……

Obj=null;
……

}
这种类变量,如果后面的逻辑不需要用到这个对象可以将其置为null,方便GC

上面是最近对要进行代码优化的项目产出的一个文档,里面参考了网上了很多大佬的文章,由于比较急并没有记录他们的博客地址。并非完全是原创,特此声明!

“是不是一定要有所失,才能有所悟!”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值