知识大全 Java程序性能优化(3)

Posted 变量

篇首语:春蚕到死丝方尽,人至期颐亦不休。一息尚存须努力,留作青年好范畴。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java程序性能优化(3)相关的知识,希望对你有一定的参考价值。

Java程序性能优化(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  十四 对于boolean值 避免不必要的等式判断

  将一个boolean值与一个true比较是一个恒等操作(直接返回该boolean变量的值) 移走对于boolean的不必要操作至少会带来 个好处

   )代码执行的更快 (生成的字节码少了 个字节)

   )代码也会更加干净

  例子

  public class UEQ

  

  boolean method (String string)

  return string endsWith ( a ) == true;   // Violation

  

  

  更正

  class UEQ_fixed

  

  boolean method (String string)

  return string endsWith ( a );

  

  

  十五 对于常量字符串 用 String 代替 StringBuffer

  常量字符串并不需要动态改变长度

  例子

  public class USC

  String method ()

  StringBuffer s = new StringBuffer ( Hello );

  String t = s + World! ;

  return t;

  

  

  更正

  把StringBuffer换成String 如果确定这个String不会再变的话 这将会减少运行开销提高性能

  十六 用 StringTokenizer 代替 indexOf() 和 substring()

  字符串的分析在很多应用中都是常见的 使用indexOf()和substring()来分析字符串容易导致StringIndexOutOfBoundsException 而使用StringTokenizer类来分析字符串则会容易一些 效率也会高一些

  例子

  public class UST

  void parseString(String string)

  int index = ;

  while ((index = string indexOf( index)) != )

  System out println (string substring(index string length()));

  

  

  

  参考资料

  Graig Larman Rhett Guthrie: Java Performance and Idiom Guide

  Prentice Hall PTR ISBN: pp –

  十七 使用条件操作符替代 if (cond) return; else return; 结构

  条件操作符更加的简捷

  例子

  public class IF

  public int method(boolean isDone)

  if (isDone)

  return ;

   else

  return ;

  

  

  

  更正

  public class IF

  public int method(boolean isDone)

  return (isDone ? : );

  

  

  十八 使用条件操作符代替 if (cond) a = b; else a = c; 结构

  例子

  public class IFAS

  void method(boolean isTrue)

  if (isTrue)

  _value = ;

   else

  _value = ;

  

  

  private int _value = ;

  

  更正

  public class IFAS

  void method(boolean isTrue)

  _value = (isTrue ? : );       // pact expression

  

  private int _value = ;

  

  十九 不要在循环体中实例化变量

  在循环体中实例化临时变量将会增加内存消耗

  例子

  import java util Vector;

  public class LOOP

  void method (Vector v)

  for (int i= ;i < v size();i++)

  Object o = new Object();

  o = v elementAt(i);

  

  

  

  更正

  在循环体外定义变量 并反复使用

  import java util Vector;

  public class LOOP

  void method (Vector v)

  Object o;

  for (int i= ;i<v size();i++)

  o = v elementAt(i);

  

  

  

  二十 确定 StringBuffer的容量

  StringBuffer的构造器会创建一个默认大小(通常是 )的字符数组 在使用中 如果超出这个大小 就会重新分配内存 创建一个更大的数组 并将原先的数组复制过来 再丢弃旧的数组 在大多数情况下 你可以在创建StringBuffer的时候指定大小 这样就避免了在容量不够的时候自动增长 以提高性能

  例子

  public class RSBC

  void method ()

  StringBuffer buffer = new StringBuffer(); // violation

  buffer append ( hello );

  

  

  更正

  为StringBuffer提供寝大小

  public class RSBC

  void method ()

  StringBuffer buffer = new StringBuffer(MAX);

  buffer append ( hello );

  

  private final int MAX = ;

  

  参考资料

  Dov Bulka Java Performance and Scalability Volume : Server Side Programming

  Techniques Addison Wesley ISBN: p –

  二十一 尽可能的使用栈变量

  如果一个变量需要经常访问 那么你就需要考虑这个变量的作用域了 static? local?还是实例变量?访问静态变量和实例变量将会比访问局部变量多耗费 个时钟周期

  例子

  public class USV

  void getSum (int[] values)

  for (int i= ; i < value length; i++)

  _sum += value[i];           // violation

  

  

  void getSum (int[] values)

  for (int i= ; i < value length; i++)

  _staticSum += value[i];

  

  

  private int _sum;

  private static int _staticSum;

  

  更正

  如果可能 请使用局部变量作为你经常访问的变量

  你可以按下面的方法来修改getSum()方法

  void getSum (int[] values)

  int sum = _sum;  // temporary local variable

  for (int i= ; i < value length; i++)

  sum += value[i];

  

  _sum = sum;

  

  参考资料

  Peter Haggar: Practical Java Programming Language Guide

  Addison Wesley pp –

  二十二 不要总是使用取反操作符(!)

  取反操作符(!)降低程序的可读性 所以不要总是使用

  例子

  public class DUN

  boolean method (boolean a boolean b)

  if (!a)

  return !a;

  else

  return !b;

  

  

  更正

  如果可能不要使用取反操作符(!)

  二十三 与一个接口 进行instanceof操作

  基于接口的设计通常是件好事 因为它允许有不同的实现 而又保持灵活 只要可能 对一个对象进行instanceof操作 以判断它是否某一接口要比是否某一个类要快

  例子

  public class INSOF

  private void method (Object o)

  if (o instanceof InterfaceBase)   // better

  if (o instanceof ClassBase)    // worse

  

  

  class ClassBase

cha138/Article/program/Java/hx/201311/26303

相关参考

知识大全 Java程序性能优化-代理模式(3)

Java程序性能优化-代理模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-缓存(Cache)(3)

Java程序性能优化-缓存(Cache)(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-单例模式(3)

Java程序性能优化-单例模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-装饰者模式(3)

Java程序性能优化-装饰者模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-对象复用“池”(3)[1]

Java程序性能优化-对象复用“池”(3)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-对象复用“池”(3)[2]

Java程序性能优化-对象复用“池”(3)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-观察者模式(3)

Java程序性能优化-观察者模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-看懂程序的性能

Java程序性能优化-看懂程序的性能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-性能概述

Java程序性能优化-性能概述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第章 J

知识大全 Java程序性能优化--让你的Java程序更快、更稳定

Java程序性能优化--让你的Java程序更快、更稳定  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧