黑马程序员技术交流社区

标题: java编程中'为了性能'一些尽量做到的地方-----② [打印本页]

作者: 常万    时间: 2012-4-11 10:02
标题: java编程中'为了性能'一些尽量做到的地方-----②
由于文字的限制1000,我只能发两个贴了:'(


文章主要是为了抛砖引玉,希望有更多牛人的指点
谢谢的  xuanyuan 的建议:  
===================================================
7.慎用synchronized,尽量减小synchronize的方法
re:同意,不过文中有个地方说错了,使用synchronized关键字并不一定都是锁定当前对象的,要看具体的锁是什么。如果是在方法上加的synchronized,则是以对象本身为锁的,如果是静态方法则锁的粒度是类。
---------------
9.尽量不要使用finalize方法
re:同意,其实不推荐用finalize方法的根本原因在于,JVM的规范并不保证何时执行该方法,所以用这个方法来释放资源很不合适,有可能造成长时间资源得不到释放。
---------------
16.尽量使用移位来代替'a/b'的操作;17.尽量使用移位来代替'a*b'的操作
re:个人不太同意这两条。这样做确实有更好的性能,但是却牺牲了可读性。这两个操作符对很多程序员来说并不直观。我认为在如今硬件价格不那么昂贵的情况下,略微牺牲一些性能,换来更好的可读性和可维护性是好的选择。
===================================================
===================================================
19.尽量早释放无用对象的引用   
大部分时,方法局部引用变量所引用的对象 会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。   
例如:   
Public void test(){   
Object obj = new Object();   
……   
Obj=null;   
}   
上面这个就没必要了,随着方法test()的执行完成,程序中obj引用变量的作用域就结束了。但是如果是改成下面:   
Public void test(){   
Object obj = new Object();   
……   
Obj=null;   
//执行耗时,耗内存操作;或调用耗时,耗内存的方法   
……   
}  
如果Object obj = new Object(); 如果这对象并不是大对象,这有必要吗?Obj=null;只是告诉jvm这个对象已经成为垃圾,至于什么时候回收,还不能确定! 这可读性也不好!

作者: 常万    时间: 2012-4-11 10:17
{:soso_e163:}{:soso_e163:}{:soso_e163:}{:soso_e163:}自己不能给自己加$_$




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2