浅谈:Java代码的优化策略

文章来源我的部落格:http://blog.itcert.org/
1.如何使用Exception
Exception降低性能。一个异常抛出首先需要创建一个新的对象。 Throwable接口中的构造器调用名为fillInStackTrace()的本地方法。这个方法负责巡检栈的整个框架来收集跟踪信息。这样无论何时有异常抛出,它要求虚拟机装载调用栈,因为一个新的对像在中部被创建。

异常应当仅用于有错误发生时,而不要控制流。

2.不要两次初始化变量

Java通过调用独特的类构造器默认地初始化变量为一个已知的值。所有的对像被设置成null,integers (byte, short, int, long)被设置成0,float和double设置成0.0,Boolean变量设置成false。这对那些扩展自其它类的类尤其重要,这跟使用一个新的关键词创建一个对象时所有一连串的构造器被自动调用一样。

3.在任何可能的地方让类为Final

标记为final的类不能被扩展。在《核心Java API》中有大量这个技术的例子,诸如java.lang.String。将String类标记为final阻止了开发者创建他们自己实现的长度方法。

更深入点说,如果类是final的,所有类的方法也是final的。 Java编译器可能会内联所有的方法(这依赖于编译器的实现)。在我的测试里,我已经看到性能平均增加了50%。

4.在任何可能的地方使用局部变量

属于方法调用部分的自变量和声明为此调用一部分的临时变量存储在栈中,这比较快。诸如static,实例(instance)变量和新的对象创建在堆中,这比较慢。局部变量的更深入优化依赖于你正在使用的编译器或虚拟机。

5.停止小聪明

很多开发人员在脑子中编写可複用和灵活的代码,而有时候在他们的程序中就产生额外的开销。曾经或者另外的时候他们编写了类似这样的代码:

public void doSomething(File file) {
FileInputStream fileIn = new FileInputStream(file);
// do something

他够灵活,但是同时他们也产生了更多的开销。这个主意背后做的事情是操纵一个InputStream,而不是一个文件,因此它应该重写如下:

public void doSomething(InputStream inputStream){
// do something

6.乘法和除法

我有太多的东东适用于摩尔法则——它声明CPU功率每年成倍增长。 “摩尔法则”表明每年由开发者所写的差劲的代码数量三倍增加,划去了摩尔法则的任何好处。

考虑下面的代码:

for (val = 0; val < 100000; val +=5) { shiftX = val 8; myRaise = val 2; }

如果我们狡猾的利用位移(bit),性能将会六倍增加。这是重写的代码:
.
.
.
.

全文阅读:http://blog.itcert.org/archives/1026


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章