- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java性能优化技巧集锦一、通用篇 1.1 不用new关键词创建类的实例 1.2 使用非阻塞I/O 1.3 慎用异常 1.4 不要重复初始化变量 1.5 尽量指定类的final修饰符 1.6 尽量使用局部变量 1.7 乘法和除法 二、J2EE篇 2.1 使用缓冲标记 2.2 始终通过会话Bean访问实体Bean 2.3 选择合适的引用机制 2.4 在部署描述器中设置只读属性 2.5 缓冲对EJB Home的访问 2.6 为EJB实现本地接口 2.7 生成主键 2.8 及时清除不再需要的会话 2.9 在JSP页面中关闭无用的会话 2.10 Servlet与内存使用 2.11 HTTP Keep-Alive 2.12 JDBC与Unicode 2.13 JDBC与I/O 1.14 内存数据库 三、GUI篇 3.1 用JAR压缩类文件 3.2 提示Applet装入进程 3.3 在画出图形之前预先装入它 3.4 覆盖update方法 3.5 延迟重画操作 3.6 使用双缓冲区 3.7 使用BufferedImage 3.8 使用VolatileImage 3.9 使用Window Blitting 四、补充资料 =================================== 正文: =================================== 一、通用篇
“通用篇”讨论的问题适合于大多数Java应用。
1.1 不用new关键词创建类的实例
用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。
在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:
public static Credit getNewCredit() {return new Credit();}
?
改进后的代码使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();public static Credit getNewCredit() {return (Credit) BaseCredit.clone();}
?
上面的思路对于数组处理同样很有用。
1.2 使用非阻塞I/O
版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。
JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。
请参见Sun中国网站的《调整Java的I/O性能》。
1.3 慎用异常
异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。
异常只能用于错误处理,不应该用来控制程序流程。
1.4 不要重复初始化变量
默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。
1.5 尽量指定类的final修饰符
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。
另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。
1
您可能关注的文档
最近下载
- 菲律宾结构设计规范NSCP chapter 1.pdf VIP
- 課程设计---四工位机床.doc VIP
- YAESU 八重洲 FT-8900R 四频段FM车载台 说明书.pdf VIP
- 2017年四川省成都市中考数学试卷及答案解析.pdf VIP
- HG_T 4196-2011 化学试剂 十水合碳酸钠(碳酸钠).docx
- 2024-2025学年小学科学四年级上册湘科版(2024)教学设计合集.docx
- 九年级美术上册第1课齐白石徐悲鸿备课岭南版.ppt VIP
- (高清版)DB32∕T 1702-2010 电力用户变电所运行规程 .pdf VIP
- 服装造型点线面.pptx VIP
- 十一自然资源配置.pptx VIP
文档评论(0)