没有合适的资源?快使用搜索试试~ 我知道了~
首页Java性能优化技巧集锦.doc
Java性能优化技巧集锦.doc
3星 · 超过75%的资源 需积分: 9 8 下载量 42 浏览量
更新于2023-03-03
2
收藏 184KB DOC 举报
可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。
资源详情
资源推荐
Java 性能优化技巧集锦
摘要
可供程序利用的资源(内存、 时间、网络带宽等)是有限的,优化的目的就是让
程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体
积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。
提纲
一、通用篇
不用 关键词创建类的实例
使用非阻塞
慎用异常
不要重复初始化变量
尽量指定类的 修饰符
尽量使用局部变量
乘法和除法
二、 J2EE
篇
使用缓冲标记
始终通过会话 访问实体
选择合适的引用机制
在部署描述器中设置只读属性
缓冲对 的访问
为 实现本地接口
生成主键
及时清除不再需要的会话
在 页面中关闭无用的会话
! "#$ 与内存使用
%%&'()*#
+ 与 *,-
+ 与
内存数据库
三、 GUI
篇
用 ). 压缩类文件
提示 )''$ 装入进程
在画出图形之前预先装入它
覆盖 /'-$ 方法
延迟重画操作
使用双缓冲区
使用 /0"-1
使用 2$*1
使用 3*-*$$*1
一、通用篇
“通用篇”讨论的问题适合于大多数 Java 应用。
1.1 不用 new 关键词创建类的实例
用 new 关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对
象实现了 Cloneable 接口,我们可以调用它的 clone()方法。clone()方法不会调用任何类构造函
数。
在使用设计模式(+4*1$$")的场合,如果用 5,$"6 模式创建对象,
则改用 ,78方法创建新的对象实例非常简单。例如,下面是 5,$"6 模式
的一个典型实现:
'/9*,4$$*,"-*$1$:"-*$78;
"$/""-*$78<
=
改进后的代码使用 ,78方法,如下所示:
'"*#$4$$*,"-*$4"-*$"-*$78<
'/9*,4$$*,"-*$1$:"-*$78;
"$/"7"-*$84"-*$,78<
=
上面的思路对于数组处理同样很有用。
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.6 尽量使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他
变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编
译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。
1.7 乘法和除法
考虑下面的代码:
>"7#!<#?!!!!!<#@8;$"A#B
<6.4/$#B<=
用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:
>"7#!<#?!!!!!<#@8;$"A#
??<6.4/$#??<=
修改后的代码不再做乘以 8 的操作,而是改用等价的左移 3 位操作,每左移 1 位相当于乘以
2。相应地,右移 1 位操作相当于除以 2。值得一提的是,虽然移位操作速度快,但可能使代码
比较难于理解,所以最好加上一些注释。
二、J2EE 篇
前面介绍的改善性能技巧适合于大多数 Java 应用,接下来要讨论的问题适合于使用 JSP、EJB
或 JDBC 的应用。
2.1 使用缓冲标记
一些应用服务器加入了面向 JSP 的缓冲标记功能。例如,BEA 的 WebLogic Server 从 6.0 版本
开始支持这个功能,Open Symphony
工程也同样支持这个功能。JSP 缓冲标记既能够缓冲
页面片断,也能够缓冲整个页面。当 JSP 页面执行时,如果目标片断已经在缓冲之中,则生成
该片断的代码就不用再执行。页面级缓冲捕获对指定 URL 的请求,并缓冲整个结果页面。对于
购物篮、目录以及门户网站的主页来说,这个功能极其有用。对于这类应用,页面级缓冲能够
保存页面执行的结果,供后继请求使用。
对于代码逻辑复杂的页面,利用缓冲标记提高性能的效果比较明显;反之,效果可能略逊一筹。
请参见《用缓冲技术提高
JSP
应用的性能和稳定性 》。
2.2 始终通过会话 Bean 访问实体 Bean
直接访问实体 Bean 不利于性能。当客户程序远程访问实体 Bean 时,每一个 get 方法都是一个
远程调用。访问实体 Bean 的会话 Bean 是本地的,能够把所有数据组织成一个结构,然后返回
它的值。
用会话 Bean 封装对实体 Bean 的访问能够改进事务管理,因为会话 Bean 只有在到达事务边界
时才会提交。每一个对 get 方法的直接调用产生一个事务,容器将在每一个实体 Bean 的事务之
后执行一个“装入-读取”操作。
一些时候,使用实体 Bean 会导致程序性能不佳。如果实体 Bean 的唯一用途就是提取和更新数
据,改成在会话 Bean 之内利用 JDBC 访问数据库可以得到更好的性能。
2.3 选择合适的引用机制
在典型的 JSP 应用系统中,页头、页脚部分往往被抽取出来,然后根据需要引入页头、页脚。
当前,在 JSP 页面中引入外部资源的方法主要有两种:include 指令,以及 include 动作。
include 指令:例如<%@ include file="copyright.html" %>。该指令在编译时引入指定
的资源。在编译之前,带有 include 指令的页面和指定的资源被合并成一个文件。被引
用的外部资源在编译时就确定,比运行时才确定资源更高效。
include 动作:例如<jsp:include page="copyright.jsp" />。该动作引入指定页面执行后
生成的结果。由于它在运行时完成,因此对输出结果的控制更加灵活。但时,只有当
被引用的内容频繁地改变时,或者在对主页面的请求没有出现之前,被引用的页面无
法确定时,使用 include 动作才合算。
2.4 在部署描述器中设置只读属性
实体 Bean 的部署描述器允许把所有 get 方法设置成“只读”。当某个事务单元的工作只包含执行
读取操作的方法时,设置只读属性有利于提高性能,因为容器不必再执行存储操作。
2.5 缓冲对 EJB Home 的访问
EJB Home 接口通过 JNDI 名称查找获得。这个操作需要相当可观的开销。JNDI 查找最好放入
Servlet 的 init()方法里面。如果应用中多处频繁地出现 EJB 访问,最好创建一个
EJBHomeCache 类。EJBHomeCache 类一般应该作为 singleton 实现。
2.6 为 EJB 实现本地接口
本地接口是 ! 规范新增的内容,它使得 能够避免远程调用的开销。
请考虑下面的代码。
6C768
D#E"*"$9.$9D,$""
7,$EF/'7G6G8H
剩余31页未读,继续阅读
简练网
- 粉丝: 123
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功