会计考友 发表于 2012-8-4 12:37:27

JAVA基础:构建高性能J2EE应用的十个窍门

构建高机能的J2EE应用不单需要体味常用的实施技巧。下面介绍最常用的10种有用体例,可辅佐架构设计师们快速成为这方面的专家。
  Java机能的基本—内存打点
  任何Java应用,单机的或J2EE的机能基本都可归结到你的应用是若何打点内存的问题。Java的内存打点搜罗两个主要使命:内存的分配和内存的收受接管。在内存的分配中,方针是要削减需要建树的对象。
  内存收受接管是导致机能下降的普遍原因。也就是说,内存中的对象越多,垃圾收受接管越坚苦。所以我们对建树对象的立场应该越保守越好。
  在J2EE应用中常见的两个内存有关的问题是:游离的对象(也被称为内存泄露)和对象轮回(指年夜量频仍建树和删除-在Java中浮现为解除引用---对象)。
  我们应注重确保所有可达到的对象现实是活的,即这些对象不单在内存中,而且也要在执行的代码中是存在的。当对象在应用中已经没有用了,而我们却健忘了删除对该对象的引用时,游离的对象就呈现了。
  我们知道垃圾收受接管会占用CPU时刻。短期对象的年夜量建树增添了垃圾收受接管的频率会造成机能下降。
  不要在Servlet中实现营业逻辑
  在构建J2EE应用时,架构工程师凡是会使用到J2EE的根基部门——Servlet。如不美观架构师不使用Session Beans, Entity Beans, 或 Message Beans, 那么改良机能的体例就很少。只能采用增添CPU或更多的物理处事器等体例。EJB使用了缓存(cache)和资本池等体例可以提高机能和扩展性。
  尽可能使用当地接口访谒EJB
  在早期的J2EE (遵循EJB1.X规范)应用中,访谒EJB是`经由过程RMI使用远程接口实现的。跟着EJB2.0的呈现,可以经由过程当地接口访谒EJB,不再使用RMI,在统一个JVM中使用远程体例已经少多了。可是此刻仍是有一些使用EJB1.X实现的应用和不知道使用当地接口的一些EJB新手。为声名这点,我们作个斗劲:
  1、客户端应用挪用当地Stub
  2、该Stub装配参数
  3、该Stub传到skeleton
  4、该skeleton分化参数
  5、该skeleton挪用EJB对象
  6、EJB对象执行容器处事
  7、EJB对象挪用企业BEAN实例
  8、企业BEA执行操作
  9、执行组装/分化轨范然后返回
  与远程接口措置对角力计较,当地接口的EJB体例是:
  1、客户端挪用当地对象
  2、当地对象执行容器处事
  3、当地对象挪用企业Bean实例
  4、企业Bean实例执行操作
  5、没有其他返回轨范!
  如不美观你不需要年夜远程的客户端访谒一个非凡EJB,就应该使用本处所法。

会计考友 发表于 2012-8-4 12:37:28

JAVA基础:构建高性能J2EE应用的十个窍门

</p>在实现Session Bean的处事中封装对实体EJB的访谒

  年夜Servlet访谒实体EJB不单效率低而且难于维护。使用Session Facade(会话外不美观)模式可把对实体EJB的访谒封装在会话EJB中,在该会话EJB中经由过程使用当地接口访谒实体EJB而避免过多的远程挪用。
  这项手艺会有额外的机能和扩展方面的益处,这是因为会话和实体EJB可以使用缓存和资本池手艺来进行改良。此外,因为负载的需要,会话和实体EJB可被扩展部署到其他硬件设备上,这比将Servlet层复制扩展到其他硬件设备上要简单的多。
  尽量粗粒度访谒远程EJB
  当访谒远程EJB时,挪用set/get体例将发生过多的收集请求,同时也导致远程接口措置的过载。为避免这种情形,可考虑将数据属性集中在一个对象中,这样经由过程一次对远程EJB的挪用就可以传递所稀有据。这项手艺就是数据传输对象(Data Transfer Object)模式。
  优化SQL
  J2EE的架构设计工程师和开发人员凡是不是SQL专家或经验丰硕的数据库打点员。首先应该确保SQL使用了数据库供给的索引撑持。在某些情形下,将数据库的索引和数据分隔存放会提高机能。但要知道,增添额外的索引可以提高SELECT机能但也会降低INSERT的机能。对于某些数据库,联系关系表之间的排序会严重影响机能。可以多向数据库打点员咨询。
  避免在实体EJB中过多执行SQL
  有时辰,经由过程实体EJB访谒数据会执行多个SQL语句。按照J2EE 规范,第一步,将挪用实体Bean的find(发现)体例;第二步,在第一次挪用实体EJB的营业体例时,容器会挪用ejbLoad()年夜数据库中获得信息。
  良多CMP(容器打点持久性)在挪用发现体例时就缓存了实体数据,所以在挪用ejbLoad()时就不再访谒数据库了。应该避免使用BMP(Bean打点的持久性)或者自己实现缓存算法避免二次访谒数据库。
  使用Fast Lane Reader 模式访谒只读数据
  J2EE应用经常要以只读体例访谒年夜量长时刻不变的数据,而不是访谒单个实体,例如浏览在线产物目录。在这种只读情形下,使用实体EJB访谒数据会导致严重过载而且实现很麻烦。实体EJB 适合于对单个实体的粗粒度访谒,访谒年夜量的列表只读数据时效率不高。不管是使用CMP仍是BMP,必然需要编写代码操作多个实体EJB及其联系关系。这将导致访谒多个数据库并存在年夜量的也是不需要的事务开销。
  操作Java Messaging Servce(动静处事)
  J2EE规范在JMS中供给了内置的异步措置处事。当涉及到系统需求时,应该体味在什么情形下应该采用JMS进行异步措置的设计。一旦确定要执行一些异步措置,那么同步措置的使命就应该越少越好,将数据库密集的操作放置在稍后的异步措置中完成。
  缓存JNDI Lookup查找
  良多操作在进行JNDI查找时要耗损年夜量资本。凡是应该缓存JNDI资本避免收集挪用和某些措置的过载。可以缓存的JNDI查找搜罗:
  EJB Home Interfaces
  Data Sources
  JMS Connection Factories
  MS Destinations/Topics   一些JNDI包实现了缓存功能。可是挪用对EJB主接口的narrow体例时,这种功能浸染有限。缓存查找的设计应该使用共享的IntialContext 实例,尽管构建它很麻烦。这是因为需要访谒多种数据源,搜罗应用资本文件JNDI.properties,系统属性的各项参数,传入到机关函数的各项参数
页: [1]
查看完整版本: JAVA基础:构建高性能J2EE应用的十个窍门