`
D-tune
  • 浏览: 77563 次
  • 性别: Icon_minigender_1
  • 来自: 上海浦东
文章分类
社区版块
存档分类
最新评论

java代码优化11大原则

阅读更多

							private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}

 

Java语言习惯用语

1.循环

■ 在重要的循环里,消除循环终止判断时的方法调用。

例如:将

 

							for(int i=0; i<collection.size();i++){
       ...
      }

 

替换为…

 

							for(int i=0; n=collection.size();i<n;i++){
...
}

 

■ 通常,把与循环index不相关的移到循环的外面

 

							for(int i=0; terminal=x.length;i<terminal;i++){
x[i] = x[i]/scaleA *scaleB;
}

 

应该该成:

 

							Double scale =  scaleB*scaleA;
for(int i=0; terminal=x.length;i<terminal;i++){
x[i] = x[i]/scale ;
}

 

2.字符串

■ 消除字符串连接

■ 创建长字符串时,总是使用StringBuffter代替String

■ 预先分配StringBuffer空间 StringBuffer sb = new StringBuffer(5000);

3.基本数据类型

■ 在重要的循环里使用基本数据类型(int型数据通常比long/double型数据更快)

■ 基本数据类型(Boolean,Integer,etc)的包装类主要用在当传递的方法参数必须是一个对象的引用时(而不是一个基本数据类型)

■ 对所有的常量代数表达式使用static final修饰符

■ 使常量更容易引用(编译器预先计算常量表达式)
  

 

4.异常

■ 异常只用于单个真正的错误条件 如小说520网 www.5a520.cn 抛出异常时

抛出一个异常和执行一个catch代码块花费是很高的(主要由于当创建一个异常时要获得线程栈的一个快照)

只当条件真的异常时才抛出一个异常

■ 抛出异常首先要创建一个新的对象。

Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。

只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。

异常只能用于错误处理,不应该用来控制程序流程。

■ 使编译器和运行时最优化,将几个方法调用放在一个try/catch块中,而不是为每个方法调用实现几个try/catch块

 

									try{    
        Some.method1();   //Difficut for java1.4    
    }catch(method1Exception e){    
        handle exception 1  // to optimize this code    
    }    
          
try{    
        Some.method2();   //Difficut for java1.4    
     }catch(method2Exception e){    
        handle exception 2  // to optimize this code    
     }    
          
try{    
         Some.method3();   //Difficut for java1.4    
     }catch(method3Exception e){    
        handle exception 3  // to optimize this code    
    }

应该写为:

 

									try{    
      Some.method1();       
      Some.method2();       
      Some.method3();   //Difficut for java1.4    
   }catch(method1Exception e){    
       handle exception 1      
   }catch(method2Exception e){    
       handle exception 2      
   }catch(method3Exception e){    
       handle exception 3      
   }

5.基准

■ 注意,所有这些技巧会因不同的平台和虚拟机而不同

  一 例如:在有些servlet容器内,通过一个OutputStream作为字节输出会更快

  二 在其它的容器内,通过一个PrintWriter输出字符会更快

■ 这些技巧描述的是最可移植的建议

■ 你可能需要运行一些基准来判断在你的平台上怎么样是最快的

6.不用new关键词创建类的实例

■用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。

但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。

在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。

例如,下面是Factory模式的一个典型实现:

 

									public static Credit getNewCredit() {    
   return new Credit();    
  }

优化后:

 

									private static Credit BaseCredit = new Credit();    
public static Credit getNewCredit() {
    return (Credit) BaseCredit.clone();
}

上面的思路对于数组处理同样很有用。
  

 

7.使用非阻塞I/O

■Java版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。

JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。

8.不要重复初始化变量

■默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻辑值设置成false。

当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

9.尽量指定类的final修饰符

■带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。

另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

10.尽量使用局部变量

■调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。

11.乘法和除法

■考虑下面的代码:

 

											for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }

优化后:

 

											for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。

 

4.异常

■ 异常只用于单个真正的错误条件 如小说520网 www.5a520.cn 抛出异常时

抛出一个异常和执行一个catch代码块花费是很高的(主要由于当创建一个异常时要获得线程栈的一个快照)

只当条件真的异常时才抛出一个异常

■ 抛出异常首先要创建一个新的对象。

Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。

只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。

异常只能用于错误处理,不应该用来控制程序流程。

■ 使编译器和运行时最优化,将几个方法调用放在一个try/catch块中,而不是为每个方法调用实现几个try/catch块

 

							try{    
        Some.method1();   //Difficut for java1.4    
    }catch(method1Exception e){    
        handle exception 1  // to optimize this code    
    }    
          
try{    
        Some.method2();   //Difficut for java1.4    
     }catch(method2Exception e){    
        handle exception 2  // to optimize this code    
     }    
          
try{    
         Some.method3();   //Difficut for java1.4    
     }catch(method3Exception e){    
        handle exception 3  // to optimize this code    
    }

应该写为:

 

							try{    
      Some.method1();       
      Some.method2();       
      Some.method3();   //Difficut for java1.4    
   }catch(method1Exception e){    
       handle exception 1      
   }catch(method2Exception e){    
       handle exception 2      
   }catch(method3Exception e){    
       handle exception 3      
   }

5.基准

■ 注意,所有这些技巧会因不同的平台和虚拟机而不同

  一 例如:在有些servlet容器内,通过一个OutputStream作为字节输出会更快

  二 在其它的容器内,通过一个PrintWriter输出字符会更快

■ 这些技巧描述的是最可移植的建议

■ 你可能需要运行一些基准来判断在你的平台上怎么样是最快的

6.不用new关键词创建类的实例

■用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。

但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。

在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。

例如,下面是Factory模式的一个典型实现:

 

							public static Credit getNewCredit() {    
   return new Credit();    
  }

优化后:

 

							private static Credit BaseCredit = new Credit();    
public static Credit getNewCredit() {
    return (Credit) BaseCredit.clone();
}

上面的思路对于数组处理同样很有用。
  

 

7.使用非阻塞I/O

■Java版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。

JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。

8.不要重复初始化变量

■默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻辑值设置成false。

当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

9.尽量指定类的final修饰符

■带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。

另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

10.尽量使用局部变量

■调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。

11.乘法和除法

■考虑下面的代码:

 

									for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }

优化后:

 

									for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。

分享到:
评论

相关推荐

    JAVA代码优化工具

    Java代码优化是提升应用程序性能的关键步骤,尤其是在大型企业级应用或者高性能服务中。优化能够减少内存消耗,提高程序运行速度,降低CPU使用率,并改善整体的用户体验。在Java开发领域,有多种工具可以帮助开发者...

    java代码优化简介

    Java代码优化是对程序进行改进的过程,旨在提升程序的运行效率,减少资源的消耗。优化主要关注两个方面:减小代码体积和提高代码执行效率。在Java中,性能问题往往源于编程习惯而非语言本身。以下是一些针对Java代码...

    java 代码重构优化 Java 代码优化 java设计优化

    以上就是关于Java代码重构、优化以及设计优化的一些关键点,这些知识不仅能提升代码质量,还能帮助开发者更好地应对项目中的各种挑战。通过深入学习《重构-改善既有代码的设计》这样的经典书籍,你可以进一步提升...

    java代码优化

    以上只是部分Java代码优化的通用原则,实际的优化过程需要结合具体项目和性能指标进行。博客文章可能会深入讨论这些话题,并给出具体的代码示例和实践建议。通过阅读和理解这些内容,开发者能够提升其Java代码的质量...

    java代码优化编程共11页.pdf.zip

    "java代码优化编程共11页.pdf.zip"这个压缩包显然包含了关于Java代码优化的详细教程或指南,虽然我们无法直接查看具体内容,但可以基于已知的Java优化策略来展开讨论。 首先,Java代码优化可以从以下几个层面进行:...

    Java代码与架构之完美优化配套代码.rar

    《Java代码与架构之完美优化——实战经典》是一本深入探讨Java编程语言和架构优化的书籍,其配套代码集提供了一系列实例,旨在帮助读者更好地理解并应用书中的理论知识。这个压缩包包含的文件名为“03_《Java代码与...

    JAVA代码优化.doc

    以上是Java代码优化的一些核心原则,遵循这些原则可以显著提升程序的运行效率和资源利用率。在实际开发中,还应结合具体场景和工具,如使用性能分析工具进行代码剖析,以便更精确地定位和优化性能瓶颈。

    eclipse开发性能优化、java代码性能优化

    通过上述介绍的 Eclipse 开发环境和 Java 代码级别的性能优化措施,开发者可以在很大程度上提升开发效率和应用性能。需要注意的是,性能优化是一个持续的过程,随着技术的发展和业务需求的变化,优化策略也需要不断...

    JAVA代码优化.pdf

    Java代码优化是一个重要的主题,它涉及到程序性能的提升和资源的有效利用。在Java程序设计中,优化代码不仅可以提高运行效率,还可以减少内存消耗,避免不必要的性能瓶颈。以下是一些常见的Java代码优化策略: 1. *...

    Java代码优化赵志华PPT学习教案.pptx

    1. **代码优化原则**: - **等价变换**:优化不改变程序的逻辑和输出结果,只是对代码进行形式上的改进。 - **明确优化目标**:优化的目标应当基于实际需求和问题,避免过度优化导致代码可读性和维护性下降。 - *...

    Java代码与架构之完美优化配套课件.rar

    1. **代码优化**:编写高效、可读性强的代码是优化的基础。课件可能会讲解如何避免冗余代码、减少运算开销、合理使用数据结构和算法、以及遵循SOLID设计原则等。 2. **内存管理**:Java的垃圾回收机制虽然自动化,...

    java代码优化总结1.0版本.7z

    Java代码优化是提升软件性能、减少资源消耗的关键环节。在这个1.0版本的总结文档中,我们将会探讨一些核心的Java代码优化策略和技术,旨在帮助开发者编写更高效、更易于维护的代码。 首先,了解JVM(Java虚拟机)的...

    非常实用的java代码优化详解

    Java代码优化是提升程序性能和效率的关键步骤,它涉及到多个层面,包括对象声明、循环、初始化、堆栈管理和异常处理等方面。以下是对这些知识点的详细解释: 1. **对象声明**: - 避免无用的对象创建:频繁创建和...

    java代码优化细节总结1.0版本.zip

    Java代码优化是提升程序性能和效率的关键步骤,尤其是在大型企业级应用中,高效的代码能够显著降低服务器资源消耗,提高用户体验。这份"java代码优化细节总结1.0版本"的资料,旨在归纳和分享一些Java编程中的最佳...

    java代码优化细节总结1.0版本.7z

    Java代码优化是提升程序性能和效率的关键步骤,它涉及到许多层面,包括语法、内存管理、算法选择、数据结构设计以及并发处理等。以下是对标题和描述中所提及的"Java代码优化细节"的详细解读: 1. **语法优化**: -...

    java优化编程ppt讲义,附代码

    **Java优化编程PPT讲义概述** ...以上是Java优化编程的主要内容,通过学习这些知识点,开发者能够更好地理解如何编写出高效、稳定、易于维护的Java代码。配合提供的PPT讲义和实际代码示例,学习效果将更为显著。

    java五子棋源代码

    * Java代码优化:Java中用于优化代码的技术,包括代码重构、代码优化、性能优化等。 * 代码可读性:Java中的代码可读性,包括代码组织、代码注释、代码格式等。 Java五子棋源代码项目涉及了Java语言的多个方面,...

    Java程序性能优化 让你的Java程序更快、更稳定附本书示例代码(清晰版)

    总的来说,“Java程序性能优化 让你的Java程序更快、更稳定”这本书将涵盖以上诸多方面,通过理论结合实际的示例代码,帮助读者深入理解Java性能优化的各个方面,从而写出更快、更稳定的Java程序。书中附带的源文件...

    java代码规范——很经典的一本书

    Java代码规范是编程界的一本重要著作,它旨在提高代码质量、增强可读性和可维护性,从而使得软件开发团队能够更加...通过阅读《java代码规范》这本书,你可以更深入地理解和实践这些原则,成为一名更优秀的Java程序员。

    重构 代码优化企业实战

    所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是...

Global site tag (gtag.js) - Google Analytics