`
avaj
  • 浏览: 237551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转载一篇老文章:构建高性能J2EE应用的十个技巧

阅读更多

在最近的几次性能调优的实战中发现,往往是我们认为说的不值得说的东西没有被遵守,才引起了一系列nc一样的问题。

 

下面转载一篇文章,就是那些被“所谓的高手”鄙视的东西。

----------------------------

构建高性能的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,就应该使用本地方法。

在实现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,系统属性的各项参数,传入到构造函数的各项参 数。

分享到:
评论

相关推荐

    使用eclipse开发J2EE应用

    本篇文章将详细介绍如何利用Eclipse进行J2EE应用程序的开发,帮助初学者和有经验的开发者更好地理解和掌握这一过程。 首先,J2EE(Java Platform, Enterprise Edition)是Oracle公司提供的一个用于开发企业级应用...

    当前流行的J2EE WEB应用架构分析

    本篇文章将深入探讨当前流行的J2EE Web应用架构,分析其关键技术组成及其在项目中的应用。 #### 二、J2EE Web应用架构概述 ##### 2.1 架构组成 J2EE架构主要包括以下几个核心组成部分: - **JavaServer Pages (JSP...

    J2ME-J2EE论文

    J2EE(Java 2 Platform, Enterprise Edition)则面向企业级应用开发,它提供了服务器端应用程序的运行环境,支持多层分布式架构,包括Web服务、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等组件,...

    J2EE从零开始

    它提供了一系列服务和组件,支持大规模、高性能的企业级应用开发。 #### 二、J2SE基础学习 学习J2EE之前,首先需要掌握J2SE的基础知识,这是进入高级应用领域的基石。建议使用集成开发环境(IDE)进行学习,如...

    j2ee综述

    本篇文章将深入探讨J2EE的体系结构、核心组件以及在实际应用中的设计与架构。 一、J2EE体系结构 J2EE平台由多个层次组成,这些层次包括客户端层、Web层、业务逻辑层(EJB层)和数据存储层。每一层都有特定的职责,...

    j2ee解决方案各种框架解决方案

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是用于构建企业级分布式应用程序的平台,它提供了丰富的服务和组件模型,以支持大型企业的复杂需求。本篇将深入探讨J2EE解决方案中涉及的各种框架及其应用...

    j2ee6 中文规范

    Java EE 6的这些特性极大地提高了开发效率,降低了企业级应用的复杂性,同时也为开发者提供了更丰富的工具集来构建健壮、高性能的应用。无论是新手还是经验丰富的Java开发者,都能从这个规范中受益,实现更高效、更...

    整合flex与j2ee

    标题“整合flex与j2ee”揭示了一个关键的技术主题,即如何将Adobe Flex前端开发框架与Java Enterprise Edition(J2EE)后端平台相结合,以构建富互联网应用程序(RIA)。Flex是一款强大的工具,用于创建交互式的、...

    学习J2EE 1_4同学可以下载看看会对你学习J2EE有帮助的!!!

    J2EE 1_4版本是J2EE历史上的一个重要里程碑,它为开发者提供了丰富的功能和组件,以支持复杂的业务逻辑和高可用性的系统构建。这篇长文将深入探讨J2EE 1_4的核心概念、主要技术组件以及学习资源,以帮助学习者更好地...

    一个j2ee的开发案例程序

    本篇将深入剖析一个J2EE的开发案例程序,旨在帮助读者理解和掌握J2EE的核心技术和实践方法。 首先,J2EE的架构由多个层次组成,包括客户端层、Web层、业务逻辑层(EJB)以及数据访问层(JDBC/ORM)。在这个案例程序...

    Flex整合J2EE开发小记+源码下载

    Flex是一种用于构建富互联网应用程序(RIA)的前端开发框架,而J2EE是用于构建企业级后端系统的强大平台。这种整合允许开发者创建交互性强、用户体验优秀的Web应用,同时利用J2EE的稳定性和可扩展性。 在描述中虽然...

    文献翻译----基于J2EE在分布式环境下的底层结构的自动动态配置应用.pdf

    J2EE(Java 2 Platform, Enterprise Edition)是Java平台的一个版本,专为构建企业级应用而设计,支持多层架构和分布式计算。然而,传统的J2EE应用部署涉及大量系统服务和应用组件的配置,这是一个复杂且耗时的过程...

    J2ME&J2EE;用户登录交互

    另一方面,J2EE则是一种用于构建多层分布式企业级应用的平台,它包括一组服务、APIs和协议,用于开发可部署在服务器集群上的、具有高可用性和可伸缩性的应用程序。核心组件如Servlet、JSP(JavaServer Pages)、EJB...

    J2EE框架学习笔记

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是一个广泛使用的后端开发平台,主要用于构建企业级分布式应用程序。本篇学习笔记将聚焦于四个核心的J2EE框架:JDBC、Hibernate、Struts和Spring,这些框架...

    J2EE帮助文档

    它提供了一个全面的框架,包含了多种服务、API和协议,使得开发者能够创建可扩展、高可用性和安全的Web应用。本篇文章将深入探讨J2EE 1.3.1和1.5版本的关键知识点,以及它们提供的API帮助文档。 **J2EE 1.3.1 API**...

    基于J2EE的电子商务应用开发技术研究【硕士论文】

    总的来说,这篇论文全面地探讨了J2EE技术在电子商务领域的应用,为读者提供了理论知识和实践经验,对于理解如何构建高性能、高可用性的电子商务系统具有很高的参考价值。通过阅读并学习本论文,开发者可以更好地掌握...

    j2EE 经典面试题

    在IT行业中,Java企业级应用开发(J2EE,现称为Java EE)是不可或缺的一部分,它为构建大型、分布式、多层的企业系统提供了强大的框架和API。本篇将围绕"J2EE经典面试题"这一主题,深入探讨相关知识点,帮助你应对...

    原创毕业设计翻译—J2EE—外国论文原文+翻译

    这篇毕业设计翻译主要聚焦在J2EE(Java 2 Enterprise Edition)技术和Aspect Oriented Programming(AOP,面向切面编程)上,这是两个在IT领域尤其是企业级应用开发中至关重要的概念。首先,我们来详细了解一下这两...

Global site tag (gtag.js) - Google Analytics