没有合适的资源?快使用搜索试试~ 我知道了~
J2EE系统优化之对象与循环
需积分: 0 0 下载量 183 浏览量
2020-03-04
09:07:27
上传
评论
收藏 32KB DOC 举报
温馨提示
试读
3页
优化一般意义上说是提高已有系统的性能,减少如内存、数据库、网络带宽等资源的占用,是在系统开发告一段落的前提下进行。一般是通过压力测试或具体使用发现性能方面的问题,然后寻找性能瓶颈,并结合项目进度、人员安排、技术储备等因素,提出相应的优化策略。本文结合一些案例,进行具体的讨论,总结出两个有代表性的条例。
资源推荐
资源详情
资源评论
J2EE 系统优化之对象与循环
优化一般意义上说是提高已有系统的性能,减少如内存、数据库、网络带宽等资源的占用,
是在系统开发告一段落的前提下进行。一般是通过压力测试或具体使用发现性能方面的问
题,然后寻找性能瓶颈,并结合项目进度、人员安排、技术储备等因素,提出相应的优化
策略。
本文结合一些案例,进行具体的讨论,总结出两个有代表性的条例:
条例一:尽量重用对象,避免创建过多短时对象
对 象在面向对象编程中随处可见,甚至可以毫不夸张的说是:“一切都是对象”。如何更好
的创建和使用对象,是优化中要考虑的一个重要方面。笔者将对象按使用分 为两大类:独
享对象和共享对象。独享对象指由某个线程单独拥有并维护其生命周期的对象,一般是通
过 new创建的对象,线程结束且无其它对这个对象的引 用,这个对象将由垃圾收集机制
自动 GC。共享对象指由多个线程共享的对象,各线程保持多个指向同一个对象的引用,
任何对这个对象的修改都会在其它引用上得 到体现,共享对象一般通过 Factory 工厂的
getInstace()方法创建,单例模式就是创建共享对象的标准实现。独享对象由于无其它指
向同一对象 的引用,不用担心其它引用对对象属性的修改,在多线程环境里,也就不需要
对其可能修改属性的方法加以同步,减少了出错的隐患和复杂性,但由于需要为每个线 程
都创建对象,增加了对内存的需求和 JVMGC 的负担。共享对象则需要进行适当的同步
(避免较大的同步块,同时防止死锁)。
还有几种特殊 对象:不变对象和方法对象。不变对象指对象对外不含有修改对象属性的方
法(如 set 方法),外部要修改属性只能通过 new 新的实例来实现。不变对象最大的 好
处就是无需担心属性被修改,避免了潜在的 bug,并能无需任何额外工作(如同步)就很
好的工作在多线程环境下。如 jdk 的 String 对象就是典型的不 变对象。方法对象简单的
说就是仅包含方法,不含有属性的对象。由于没有对象属性,方法中无需进行修改属性的
操作,也就能采用 static 方法或单例模式, 避免每次使用都要 new 对象,减少对象的使
用。
那么该如何确定创建何种对象,这就要结合对象的使用方式和生命周期、对象大小、构建
花销等方 面来综合考虑。如果对象生命周期较长,会存在修改操作,不能容忍其它线程对
其的修改,就应该采用独享对象,如常见的 Bean 类。而如果对象生命周期较长, 且能为
各个线程共享,就可以考虑共享对象。共享有 2 种常见情况,一种是系统全局对象,如配
置属性等,各个线程应该引用同一对象,任何对这个对象的修改都会 影响其它线程;另一
种是由于对象创建开销较大,各线程对此对象是瞬时访问,且无需再次读取其属性,如常
见的 Date对象,一般这种对象的使用是瞬时的, 比如把它 format 成 String,如果每次
创建然后等待 GC 就会浪费大量内存和 CPU 时间,较好做法就是做成共享对象,各个线程
先 set 再使用,注意 对进行 set 并访问的方法要同步。不变对象一般使用在对象创建开销
较小(属性较少,类层次较少),且需要能自由共享的情形。如一个对象里的常量对象,
使用 publicstatic&nalAAA=newAAA(…)创建。方法对象使用较广,如 Util 类、
DAO 类等,这些对象提供操作其它对象 (一般是 bean 对象)的接口,能对系统在层次和功
能上进行解耦合。
资源评论
weixin_38707342
- 粉丝: 7
- 资源: 925
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功