知识大全 Java程序性能优化(2)
Posted 知
篇首语:志不强者智不达,言不信者行不果。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java程序性能优化(2)相关的知识,希望对你有一定的参考价值。
Java程序性能优化(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
八 如果只是查找单个字符的话 用charAt()代替startsWith()
用一个字符作为参数调用startsWith()也会工作的很好 但从性能角度上来看 调用用String API无疑是错误的!
例子
public class PCTS
private void method(String s)
if (s startsWith( a )) // violation
//
更正
将 startsWith() 替换成 charAt()
public class PCTS
private void method(String s)
if ( a == s charAt( ))
//
参考资料
Dov Bulka Java Performance and Scalability Volume : Server Side Programming
Techniques Addison Wesley ISBN:
九 使用移位操作来代替 a / b 操作
/ 是一个很 昂贵 的操作 使用移位操作将会更快更有效
例子
public class SDIV
public static final int NUM = ;
public void calculate(int a)
int div = a / ; // should be replaced with a >>
int div = a / ; // should be replaced with a >>
int temp = a / ;
更正
public class SDIV
public static final int NUM = ;
public void calculate(int a)
int div = a >> ;
int div = a >> ;
int temp = a / ; // 不能转换成位移操作
十 使用移位操作代替 a * b
同上
[i]但我个人认为 除非是在一个非常大的循环内 性能非常重要 而且你很清楚你自己在做什么 方可使用这种方法 否则提高性能所带来的程序晚读性的降低将是不合算的
例子
public class SMUL
public void calculate(int a)
int mul = a * ; // should be replaced with a <<
int mul = * a; // should be replaced with a <<
int temp = a * ;
更正
package OPT;
public class SMUL
public void calculate(int a)
int mul = a << ;
int mul = a << ;
int temp = a * ; // 不能转换
十一 在字符串相加的时候 使用 代替 如果该字符串只有一个字符的话
例子
public class STR
public void method(String s)
String string = s + d // violation
string = abc + d // violation
更正
将一个字符的字符串替换成
public class STR
public void method(String s)
String string = s + d
string = abc + d
十二 不要在循环中调用synchronized(同步)方法
方法的同步需要消耗相当大的资料 在一个循环中调用它绝对不是一个好主意
例子
import java util Vector;
public class SYN
public synchronized void method (Object o)
private void test ()
for (int i = ; i < vector size(); i++)
method (vector elementAt(i)); // violation
private Vector vector = new Vector ( );
更正
不要在循环体中调用同步方法 如果必须同步的话 推荐以下方式
import java util Vector;
public class SYN
public void method (Object o)
private void test ()
synchronized//在一个同步块中执行非同步方法
for (int i = ; i < vector size(); i++)
method (vector elementAt(i));
private Vector vector = new Vector ( );
十三 将try/catch块移出循环
把try/catch块放入循环体内 会极大的影响性能 如果编译JIT被关闭或者你所使用的是一个不带JIT的JVM 性能会将下降 %之多!
例子
import java io FileInputStream;
public class TRY
void method (FileInputStream fis)
for (int i = ; i < size; i++)
try // violation
_sum += fis read();
catch (Exception e)
private int _sum;
更正
将try/catch块移出循环
void method (FileInputStream fis)
try
for (int i = ; i < size; i++)
_sum += fis read();
catch (Exception e)
参考资料
Peter Haggar: Practical Java Programming Language Guide
cha138/Article/program/Java/hx/201311/26547相关参考
Java程序性能优化-代理模式(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java程序性能优化-缓冲(Buffer)(2)[2]
Java程序性能优化-缓冲(Buffer)(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Java程序性能优化-对象复用“池”(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-享元模式(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! pub
Java程序性能优化-业务代理模式(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! i
Java程序性能优化-缓存(Cache)(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
Java程序性能优化-空间换时间[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! publi
Java程序性能优化-单例模式(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-装饰者模式(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
Java程序性能优化-观察者模式(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 图&