Java代码优化策略2011-10-161. 如何使用ExceptionException降低性能。一个异常抛出首先需要创建一个新的对象。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