1、为了程序的健壮性 
我们可能使用Integer.ValueOf(1)去代替new Integer(1);
2、return result.size() > 0;
  代替if(result.size>0) return true; return false;
3、没必要这样
if(flag==true) 
...
4、"const".eqauls(variable)代替 variable.eqauls("const") 
避免null point exception
5.在连接字符串的时候尽量避免使用String = "str"+"str2"; 
而使用StringBuffer str = new StringBuffer("str");str.append("str2")代替 
6. 多使用PreparedStatement代替Statement这样可以避免在拼接字符串的时候出现 
"select * from tablename where col = '"+col+"'"单引号过多的情况 
7.在拚接查询语句的时候加上"where 1=1 "道理我就不说了 
8.多使用MessageFormat类 
9.代码中尽量少出现"123".equals(str)这样的危险字符(我们公司是这样定义的)而要 
public static final String STR = "123"; STR.equals(str)去代替. 
10.方法的命名要能够表达出方法的功能
11、一个数据有很多属性时,可以用反射取出所有属性 
在制作HTML表单时,这个方法非常爽 
12、Connection conn = null 
try{}catch(Exception e){} finally{if(conn!=null){conn.colse();conn==null}} 具体的都不说啦,大家应该都明白
13、提一个要主意的: 
给每个if(condition){}都加上大括号,即使里面只有一句话~
14、■字串的开销:字串连接运算符+看似简单,但实际需要消耗大量系统资源。编译器可高效地连接字串,但变量字串却要求可观的处理器时间。例如,假设s和t是字串变量: 
System.out.println("heading" + s + "trailer" + t); 
上述语句要求新建一个StringBuffer(字串缓冲),追加自变量,然后用toString()将结果转换回一个字串。因此,无论磁盘空间还是处理器时间,都会受到严重消耗。若准备追加多个字串,则可考虑直接使用一个字串缓冲——特别是能在一个循环里重复利用它的时候。通过在每次循环里禁止新建一个字串缓冲,可节省980单位的对象创建时间(如前所述)。利用substring()以及其他字串方法,可进一步地改善性能。如果可行,字符数组的速度甚至能够更快。也要注意由于同步的关系,所以StringTokenizer会造成较大的开销。 
■同步:在JDK解释器中,调用同步方法通常会比调用不同步方法慢10倍。经JIT编译器处理后,这一性能上的差距提升到50到100倍(注意前表总结的时间显示出要慢97倍)。所以要尽可能避免使用同步方法——若不能避免,方法的同步也要比代码块的同步稍快一些。 
■重复利用对象:要花很长的时间来新建一个对象(根据前表总结的时间,对象的新建时间是赋值时间的980倍,而新建一个小数组的时间是赋值时间的3100倍)。因此,最明智的做法是保存和更新老对象的字段,而不是创建一个新对象。例如,不要在自己的paint()方法中新建一个Font对象。相反,应将其声明成实例对象,再初始化一次。在这以后,可在paint()里需要的时候随时进行更新。参见Bentley编著的《编程拾贝》,p.81[15]。 
■异常:只有在不正常的情况下,才应放弃异常处理模块。什么才叫“不正常”呢?这通常是指程序遇到了问题,而这一般是不愿见到的,所以性能不再成为优先考虑的目标。进行优化时,将小的“try-catch”块合并到一起。由于这些块将代码分割成小的、各自独立的片断,所以会妨碍编译器进行优化。另一方面,若过份热衷于删除异常处理模块,也可能造成代码健壮程度的下降。 
■散列处理:首先,Java 1.0和1.1的标准“散列表”(Hashtable)类需要造型以及特别消耗系统资源的同步处理(570单位的赋值时间)。其次,早期的JDK库不能自动决定最佳的表格尺寸。最后,散列函数应针对实际使用项(Key)的特征设计。考虑到所有这些原因,我们可特别设计一个散列类,令其与特定的应用程序配合,从而改善常规散列表的性能。注意Java 1.2集合库的散列映射(HashMap)具有更大的灵活性,而且不会自动同步。 
■方法内嵌:只有在方法属于final(最终)、private(专用)或static(静态)的情况下,Java编译器才能内嵌这个方法。而且某些情况下,还要求它绝对不可以有局部变量。若代码花大量时间调用一个不含上述任何属性的方法,那么请考虑为其编写一个“final”版本。 
■I/O:应尽可能使用缓冲。否则,最终也许就是一次仅输入/输出一个字节的恶果。注意JDK 1.0的I/O类采用了大量同步措施,所以若使用象readFully()这样的一个“大批量”调用,然后由自己解释数据,就可获得更佳的性能。也要注意Java 1.1的“reader”和“writer”类已针对性能进行了优化。 
■造型和实例:造型会耗去2到200个单位的赋值时间。开销更大的甚至要求上溯继承(遗传)结构。其他高代价的操作会损失和恢复更低层结构的能力。 
■图形:利用剪切技术,减少在repaint()中的工作量;倍增缓冲区,提高接收速度;同时利用图形压缩技术,缩短下载时间。来自JavaWorld的“Java Applets”以及来自Sun的“Performing Animation”是两个很好的教程。请记着使用最贴切的命令。例如,为根据一系列点画一个多边形,和drawLine()相比,drawPolygon()的速度要快得多。如必须画一条单像素粗细的直线,drawLine(x,y,x,y)的速度比fillRect(x,y,1,1)快。 
■使用API类:尽量使用来自Java API的类,因为它们本身已针对机器的性能进行了优化。这是用Java难于达到的。比如在复制任意长度的一个数组时,arraryCopy()比使用循环的速度快得多。 
■替换API类:有些时候,API类提供了比我们希望更多的功能,相应的执行时间也会增加。因此,可定做特别的版本,让它做更少的事情,但可更快地运行。例如,假定一个应用程序需要一个容器来保存大量数组。为加快执行速度,可将原来的Vector(矢量)替换成更快的动态对象数组。 1. 其他建议 
■将重复的常数计算移至关键循环之外——比如计算固定长度缓冲区的buffer.length。 
■static final(静态最终)常数有助于编译器优化程序。 
■实现固定长度的循环。 
■使用javac的优化选项:-O。它通过内嵌static,final以及private方法,从而优化编译过的代码。注意类的长度可能会增加(只对JDK 1.1而言——更早的版本也许不能执行字节查证)。新型的“Just-in-time”(JIT)编译器会动态加速代码。 
■尽可能地将计数减至0——这使用了一个特殊的JVM字节码。 
 

解决方案 »

  1.   

    javac -o 这个东西还有吗?有用吗?很多东西并不可信,还是自己多实践,多总结吧。
      

  2.   

    9.代码中尽量少出现"123".equals(str)这样的危险字符(我们公司是这样定义的)而要
    public static final String STR = "123"; STR.equals(str)去代替. 我感觉这样跟魔法值没有什么区别,常量名字并不能一目了然地看出这常量是做啥的。
      

  3.   

    3、没必要这样
    if(flag==true)
    ...
    那也要看程序关联和耦合能力。
    4、"const".eqauls(variable)代替 variable.eqauls("const")
    避免null point exception,避免只会导致更大的错误,还是建议在使用前判断一下是否为null
    5.在连接字符串的时候尽量避免使用String = "str"+"str2";
    而使用StringBuffer str = new StringBuffer("str");str.append
    如果在线程上下文中,或是无需考虑线程安全,可以使用StringBuilder
    ■重复利用对象:要花很长的时间来新建一个对象(根据前表总结的时间,对象的新建时间是赋值时间的980倍,而新建一个小数组的时间是赋值时间的3100 倍)。因此,最明智的做法是保存和更新老对象的字段,而不是创建一个新对象。例如,不要在自己的paint()方法中新建一个Font对象。相反,应将其声明成实例对象,再初始化一次。在这以后,可在paint()里需要的时候随时进行更新。参见Bentley编著的《编程拾贝》,p.81[15]。只适用于对象变化周期小,在对象变化周期中,如果影响安全性反倒不如新建。尤其是JDBC中和事务相关的类。1. 其他建议
    ■将重复的常数计算移至关键循环之外——比如计算固定长度缓冲区的buffer.length。如果小于10,根本不能个优化多少,反倒因为变量占用内存。
      

  4.   

    xorg-x11-libs-6.8.2-1.EL.52.i386.rpmxorg-x11-libs-6.8.2-1.EL.52.i386.rpmxorg-x11-libs-6.8.2-1.EL.52.i386.rpmxorg-x11-libs-6.8.2-1.EL.52.i386.rpm
      

  5.   

    我对这种情况的理解是这样的:
    虽然这个常量这样表示不再那么直接,但是在大量用到
    STR.equals(str)这个方法是(如:web应用),那么服务器
    只需要开辟一次“123”的字符串空间,不再释放,这样每个线程用
    STR.equals(str)这个方法时都是用的这个空间,节省了资源消耗。
    尤其是当出现大量的STR比较时,如又需要比较“456”等,把这些都变成静态的常量
    能节省的资源就相当可观了。另外:哪位能举例解释一下“11、一个数据有很多属性时,可以用反射取出所有属性 ”
      

  6.   

    在JVM内部  String的链接   例如"a"+"b"+"c"也会被转换为StringBuilder的操作的,所以当字符串连接量不大的时候,用String并不会有性能问题,如果能带来更好的阅读性,并无不好,而你用一个字面量的时候,例如:
    StringBuiler sb =new StringBuilder("A"),里边的"A"事实上也是一个String的实例,
    sb.append("b"),里边也同样用到了字面量,所以个人认为不是专门用来连接字符的地方,不一定非要用StringBuffer和StringBuilder,但是连接量很大的时候,的确有必要
      

  7.   

    4、"const".eqauls(variable)代替 variable.eqauls("const")
    避免null point exception 
    同意29楼的说法,用这种方法避免NullPoint的确是不值得提倡的,这个非常有可能导致更大的bug藏在系统当中,而且更难发现
      

  8.   

    1、为了程序的健壮性
    我们可能使用Integer.ValueOf(1)去代替new Integer(1); jdk1.4 只有 Integer.valueOf(String) 1.5之后才有 Integer.valueOf(int)
    这是一个工厂类 使用 valueOf不会创建新的Instance 而 new Integer()则会创建新的Instance
    4、"const".eqauls(variable)代替 variable.eqauls("const")
    避免null point exception 
    非null校验 有时是业务的一部分
    如此书写会产生歧义 不推荐
    如果项目组有统一规定 另当别论
    6. 多使用PreparedStatement代替Statement这样可以避免在拼接字符串的时候出现
    "select * from tablename where col = '"+col+"'"单引号过多的情况 PreparedStatement 采用参数形势 会使得数据库也采用榜定变量的形势 直接从编译池中获得编译好的sql进而加快处理速度
    同时 PreparedStatement也避免了 SQL注入的安全漏洞.......
    .............
    ...............
    ................
    ..............
      

  9.   

           12 最后应该是 conn=null,不是conn==null
      

  10.   

    2 、3条谁会那样写呢? 太搞笑了
    6. 不对,都用prepare数据库压力就大喽。
    7. 也欠妥,设计出这种代码来水平很糟了就
    再下面没看
      

  11.   

    顶先!
    有地方没搞懂,问问楼主,就是第9条:
    9.代码中尽量少出现"123".equals(str)这样的危险字符(我们公司是
    这样定义的)而要
    public static final String STR = "123"; STR.equals(str)去代
    替. "123".equals(str)这样的危险字符, 楼主可以举例个, 为什么这样写是危险的?
      

  12.   

    Integer.valueOf(int)在1.5的时候只是简单的返回了new Integer(int), 1.6的时候才将-128到127这256个数值缓存. 即如果传入的值不在这个范围之内的话, 同样返回new Integer(int)