说到系统优化,是一个比较复杂的问题,涉及到软件的各个方面:需求、模块划分、数据库设计、程序编码以及一些特殊的优化方法如缓存技术等。而不同的应用又有其特殊的优化策略和技术。同时优化是贯穿系统从需求到实现再到维护的各个阶段的一项活动,而在各个阶段又有其不同的着眼点和具体方法。
本文立足于具体的J2EE项目实践,结合一些已有的优化条例,提出自己的一些体会,也算是作为一次对实际项目经验教训的总结。
优化一般意义上说是提高已有系统的性能,减少如内存、数据库、网络带宽等资源的占用,是在系统开发告一段落的前提下进行。一般是通过压力测试或具体使用发现性能方面的问题,然后寻找性能瓶颈,并结合项目进度、人员安排、技术储备等因素,提出相应的优化策略。
下面结合一些案例,进行具体的讨论,并希望能总结出一些具有代表性的条例:
条例一:尽量重用对象,避免创建过多短时对象
对象在面向对象编程中随处可见,甚至可以毫不夸张的说是:“一切都是对象”。如何更好的创建和使用对象,是优化中要考虑的一个重要方面。笔者将对象按使用分为两大类:独享对象和共享对象。独享对象指由某个线程单独拥有并维护其生命周期的对象,一般是通过new 创建的对象,线程结束且无其它对这个对象的引用,这个对象将由垃圾收集机制自动GC。共享对象指由多个线程共享的对象,各线程保持多个指向同一个对象的引用,任何对这个对象的修改都会在其它引用上得到体现,共享对象一般通过Factory工厂的getInstace()方法创建,单例模式就是创建共享对象的标准实现。独享对象由于无其它指向同一对象的引用,不用担心其它引用对对象属性的修改,在多线程环境里,也就不需要对其可能修改属性的方法加以同步,减少了出错的隐患和复杂性,但由于需要为每个线程都创建对象,增加了对内存的需求和JVM GC的负担。共享对象则需要进行适当的同步(避免较大的同步块,同时防止死锁)。
还有几种特殊对象:不变对象和方法对象。不变对象指对象对外不含有修改对象属性的方法(如set方法),外部要修改属性只能通过new新的实例来实现。不变对象最大的好处就是无需担心属性被修改,避免了潜在的bug,并能无需任何额外工作(如同步)就很好的工作在多线程环境下。如jdk的String对象就是典型的不变对象。方法对象简单的说就是仅包含方法,不含有属性的对象。由于没有对象属性,方法中无需进行修改属性的操作,也就能采用static方法或单例模式,避免每次使用都要new对象,减少对象的使用。
J2EE系统优化的几点体会(一、对象)
时间: 2024-09-21 18:37:43
J2EE系统优化的几点体会(一、对象)的相关文章
J2EE系统优化的几点体会
J2EE系统优化的几点体会(一.对象) 说到系统优化,是一个比较复杂的问题,涉及到软件的各个方面:需求.模块划分.数据库设计.程序编码以及一些特殊的优化方法如缓存技术等.而不同的应用又有其特殊的优化策略和技术.同时优化是贯穿系统从需求到实现再到维护的各个阶段的一项活动,而在各个阶段又有其不同的着眼点和具体方法. 本文立足于具体的J2EE项目实践,结合一些已有的优化条例,提出自己的一些体会,也算是作为一次对实际项目经验教训的总结. 优化一般意义上说是提高已有系统的性能,减少如内存.数据库.网络带宽
初学者如何开发出高质量的J2EE系统
j2ee|初学 J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向. 首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系. J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase.到Delphi/VB等C/S结构,发展到B
一个用session传递对象的典型例子,和用面向对象编程的朋友共同分享(转自CSDN)
session|编程|对象 首先,你的session要好使,PHP4.1以上的版本别忘了把php.ini中的register_globle=Off设成register_globle=On,还有就是session.cookie_path = /,注意这行不可以乱改,有的版本PHP改了这个设置session就不好使,这是PHP的一个BUG.好了,我假设你的session已经没问题了,我对下面的例子作个说明:b.php和a.php各定义了一个类,其中a.php中的类a稍微复杂,因为它是由b.php中的
J2EE 探险者:持久数据管理,第 2 部分
j2ee|数据 上月的"探险者"专栏介绍了用于数据持久性的 J2EE 技术:实体 bean.JDBC 和 Java 数据对象(Java Data Object,JDO).本月,企业 Java 专家 Kyle Gabhart 不再专门讨论比较成熟的 JDBC 技术和 EJB 技术,而是主要介绍 JDO.尽管这种技术与其它技术相比还不成熟,但您会发现 JDO 有一些独一无二的优点. 应用程序组件应实现针对企业服务的请求.要实现这些请求,应用程序组件常常必须更改底层数据存储的状态.这些更改绝
初学者如何开发出一个高质量的J2EE系统
j2ee|初学 J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向. 首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系. J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase.到Delphi/VB等C/S结构,发展
建立对象数据库-内存映射范式,需要中间层容器的支持
对象|数据|数据库|中间层 在<设想使用XML和关系数据库形成一个对象数据库>一文中,已经阐述了关系数据库和对象数据库的主要区别:对外键的使用是通过直接记录,还是遍历外键子表来获得.而这里,是面对另一个重要的区别:如何释放对象的资源.对于对象数据库而言,它等同于是一批直接存于数据库中的串行化对象,它的实际存储形式到底是不是按关系结构存储并不是最重要的,重要的是调用程序读入内存的就是一个对象,而不是游标映射:这样,使用对象数据库就必须存在着一个如何清除用完的对象资源的问题:同时由于对象数据库必然
如何开发出高质量J2EE系统
J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向 首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系. J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase.到Delphi/VB等C/S结构,发展到B/S(Browse
使用WebSphere Application Server开发高性能J2EE线程
引言 IBM WebSphere Application Server 软件提供了以下两种机制,以支持 J2EE 应用程序开发人员在 Servlet 和 EJB 组件中安全地使用线程: 异步 Bean Commonj Timer and WorkManager for Application Servers 1.1 规范. 两种编程模式都允许您创建池线程和守护程序线程,以便运行 J2EE 业务逻辑. 在两种编程模式中,线程可以由不同的应用程序重用.当应用程序逻辑开始和终止时,这可以通过应用和删除
J2EE的MVC体系结构及其设计模式(三)
7.值对象或传输对象 值对象(value object)模式通过减少分布式通信的消息而促进数据的交换,通常这里所指的通信是在Web层和EJB层之间.在一个远程调用中,一个单一值对象可以被用来取出一系列相关数据并提供给客户. 这种设计模式的出现是基于客户需要与ejb大量地交换数据的情况.具体来说,在J2EE平台中,应用系统通常将服务器端的程序组件实现为会话bean和实体bean,而这些组件的部分方法则需要将数据返回给客户:这种情况下,通常一个用户会重复调用相关方法多次,直到它得到相关信息,应该注意