JAVA资格认证-Java性能的十一个用法.docx

上传人:cn****1 文档编号:544660137 上传时间:2023-04-07 格式:DOCX 页数:6 大小:14.60KB
返回 下载 相关 举报
JAVA资格认证-Java性能的十一个用法.docx_第1页
第1页 / 共6页
JAVA资格认证-Java性能的十一个用法.docx_第2页
第2页 / 共6页
JAVA资格认证-Java性能的十一个用法.docx_第3页
第3页 / 共6页
JAVA资格认证-Java性能的十一个用法.docx_第4页
第4页 / 共6页
JAVA资格认证-Java性能的十一个用法.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《JAVA资格认证-Java性能的十一个用法.docx》由会员分享,可在线阅读,更多相关《JAVA资格认证-Java性能的十一个用法.docx(6页珍藏版)》请在金锄头文库上搜索。

1、 JAVA资格认证:Java性能的十一个用法Java语言习惯用语1。循环 在重要的循环里,消退循环终止推断时的方法调用。例如:将for(int i=0; icollection.size();i+) . 替换为for(int i=0; n=collection.size();in;i+). 通常,把与循环index不相关的移到循环的外面for(int i=0; terminal=x.length;iterminal;i+)xi = xi/scaleA *scaleB;应当该成:Double scale = scaleB*scaleA;for(int i=0; terminal=x.length

2、;iterminal;i+)xi = xi/scale ;2。字符串 消退字符串连接 创立长字符串时,总是使用StringBuffter代替String 预先安排StringBuffer空间 StringBuffer sb = new StringBuffer(5000);3。根本数据类型 在重要的循环里使用根本数据类型(int型数据通常比long/double型数据更快) 根本数据类型(Boolean,Integer,etc)的包装类主要用在当传递的方法参数必需是一个对象的引用时(而不是一个根本数据类型) 对全部的常量代数表达式使用static final修饰符 使常量更简单引用(编译器预先

3、计算常量表达式)4。特别 特别只用于单个真正的错误条件 如小说520网 抛出特别时抛出一个特别和执行一个catch代码块花费是很高的(主要由于当创立一个特别时要获得线程栈的一个快照)只当条件真的特别时才抛出一个特别 抛出特别首先要创立一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有特别被抛出,VM就必需调整调用堆栈,由于在处理过程中创立了一个新的对象。特别只能用于错误处理,不应当用来掌握程序流程。 使编译器和运行时化,将几个方法调用放在一个try/c

4、atch块中,而不是为每个方法调用实现几个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

5、(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。基准 留意,全部这些技巧会因不同的平台和

6、虚拟机而不同一 例如:在有些servlet容器内,通过一个OutputStream作为字节输出会更快二 在其它的容器内,通过一个PrintWriter输出字符会更快 这些技巧描述的是最可移植的建议 你可能需要运行一些基准来推断在你的平台上怎么样是最快的6。不用new关键词创立类的实例用new关键词创立类的实例时,构造函数链中的全部构造函数都会被自动调用。但假如一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。在使用设计模式(Design Pattern)的场合,假如用Factory模式创立对象,则改用clone()方法创立新的对

7、象实例特别简洁。例如,下面是Factory模式的一个典型实现:public static Credit getNewCredit() return new Credit(); 优化后:private static Credit BaseCredit = new Credit(); public static Credit getNewCredit() return (Credit) BaseCredit.clone();上面的思路对于数组处理同样很有用。7。使用非堵塞I/OJava版本较低的JDK不支持非堵塞I/O API。为避开I/O堵塞,一些应用采纳了创立大量线程的方法(在较好的状况下,会

8、使用一个缓冲池)。这种技术可以在很多必需支持并发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、,构造函数链中的全部构造函数都会被自动调用。9。尽量指定类的final修饰符带有final修饰符的类是不行派生的。在Java核心API中,有很多应用final的例子,例如java.lang.String。为String类指定final防止了人们掩盖length()方法。另外,假如指定一个类为final,则该类全部的方法都是final。Java编译器会查找时机内联(inline)全部的final方法(这和详细的编译器实现有关)。此举能够使性能平均提高50%。10。尽量使用局部变量调用方法时传递的参数以及在调用中创立的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,

10、都在堆(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。值得一提的是,虽然移位操作速度快,但可能使代码比拟难于理解,所以加上一些解释。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号