`
- 浏览:
363126 次
- 性别:
-
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。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
前端时间项目中需要对java服务程序进行性能测试,确保服务程序能够满足业务的并发需求,这里把整个过程中遇到的问题以及解决方法做一个总结,下次遇到类似问题的时候可以参考,提高效率。 1. 采用jmeter编写压测脚本...
│ 开篇词 Java 性能优化,是进阶高级架构师的炼金石.mp4 │ 02 理论分析:性能优化有章可循,谈谈...│ 21 性能优化的过程方法与求职面经总结.mp4 01 理论分析:性能优化,有哪些衡量指标?需要注意什么?.md
无论是工作学习,不断的总结是必不可少的。只有不断的总结,发现问题,弥补不足,才能长久的进步!!Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 ...Java 性能优化 362
本word文档时关于java编程规范性能方面的总结。
35 个 Java 代码性能优化总结
阿里巴巴java性能调优实战-最新经验总结PDF
"阿里巴巴Java性能调优实战手册" 本资源手册主要介绍了 Java 性能调优的实战经验和技术要点。手册分为七大模块,从 Java 应用服务的每一层优化实战进行讲解,旨在帮助读者快速掌握 Java 性能调优的技术。 第一个...
java性能优化方面的总结,自己已经验证一部分。
35个Java代码性能优化总结.pdf
java性能调优的基本知识.pdf
开发中我们经常忽略了一些影响性能的细节,这里特总结出来供大家参考。
《Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else ...
掌握Java语法和基础:掌握Java的语言特性、数据类型、运算符、控制结构、面向对象编程等基础知识...掌握Java性能优化:掌握Java性能优化的相关技术,如JVM参数调优、代码优化、并发编程等,能够提高应用程序的性能和效
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
Java虚拟机JVM性能优化(一):JVM知识总结
对java集合类的总结。 包括性能,类图。
Java JDBC编程总结 Hibernate、TopLink等OR Mapping操作数据库的技术都是建立JDBC技术之上的,实际来说,他们的性能和JDBC是有很大差距的,但反过来说,如果JDBC用不好,还不如hibernate呢。暂且不说这些孰优孰劣的...
Java并发编程技术总结,所含内容有并发特性、并发锁、线程池、并发场景解决方案等,对于性能思考和内容参考资料有一定说明
Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞 的,通过 Future-Listener ...
这本书里面有一百多个提升java代码的建议,都是一些牛人多年总结出来的好经验,希望对大家有帮助。