`
wenzhihua1983
  • 浏览: 82480 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

应用程序调优

阅读更多

转载:http://www.javatx.cn/clubPage.jsp?ccStyle=0&tID=45&ccID=6

3.1  对象创建
对象的创建是一个非常昂贵的工作,而由于对象的创建而导致经常性的垃圾收集则是一个更加消耗时间和CPU的操作。我们在编码时,应当尽量的减少对象的创建。不要在经常被执行的代码中创建对象;使用集合对象时最好预先分配其大小;当一个class的多个实例都需要获取某个对象时,最好能标记那个对象static;当不需要stack  trace时尽可能的重用异常实例等等都能很有效的避免对象创建而导致的额外的开销。下面是一些常用的有效的策略:

1)            对象池技术

在Java中开发一个普遍性的对象池架构可以更好地利用资源,并可以使对象创建的成本降到最小。大多数人对直接或间接运用对象池来连接一个数据库都很熟悉。但通常你也可以将对象放入对象池中从而节省重要的资源、提高程序的效率并控制对不充足资源的访问。出于对设计、成本或性能的考虑,放入对象池中的对象通常是有限的。它们或者是初始化成本很高的对象,或者是很少用的对象。运用对象池我们可以管理竞争性客户端对有限的对象集的访问。

对象池主要是可以更好地运用你的资源。例如,设想有相当多的客户要有效运用很少的数据库连接或网络连接。通过限制对对象的访问(只在客户端需要的时候才能访问对象),你就可以释放资源,让其它客户端使用。通过对象池提高对象的利用率通常可以提高系统的性能。

你可以使用对象池使初始化的成本达到最小。典型的例子包括数据库、网络连接和线程。这样的连接通常需要很多时间来初始化。一旦创建了这些连接,你就可以重用它们,从而极大地节省了成本。因此,你可以将初始化成本很高(从时间、内存或其它资源方面考虑)的对象放入对象池中。例如,大多数容器都将EJB放入对象池中,从而避免重复的资源分配和状态初始化。

一个设计良好的对象池架构具有普遍性,它适合不同应用程序的需要。可以让你控制对象池的容量、对象填充策略和对象状态。它可以极大地提高你的应用程序的效率,不管从速度方面考虑,还是从资源利用率方面考虑,该架构都可以提供这样的好处。

在这里,给大家推荐一个开源的项目Commons-Pool(http://jakarta.apache.org/commons/pool/),我还没来得及研究,谁用过了,感觉好的,麻烦告诉我一下,谢谢!

2)            ThreadLocal技术

使用此技术获取线程绑定的带状态的单例对象。

3)            单例模式

通过单例模式或使定义对象static来使得对象的实例只能有一个并被其他对象所共享。

4)            枚举常量

使用整数取代字符串作为枚举常量,比如FEMALE和MALE我们可以用整数1和2来替代。这样将带来速度上和内存上的优势。

5)            使用SoftReference,WeakReference和PhantomReference引用类

引用类的主要功能就是能够引用仍可以被垃圾收集器回收的对象。在引入引用类之前,我们只能使用强引用(Strong  Reference)。例如obj这个引用将引用堆中存储的一个对象,只要obj引用还存在,垃圾收集器就永远不会释放用来容纳该对象的存储空间。当obj超出范围或被显式指定为null时,垃圾收集器就认为没有对这个对象的其他引用,也就可以收集它了。然而还需要注意一个重要的细节:仅凭对象可以被收集并不意味着垃圾收集器的一次指定运行就能够回收它。由于各种垃圾收集算法不同,某些算法会更频繁地分析生存期较短的对象,而不是较老、生存期较长的对象。因此,一个可供收集的对象可能永远也不会被回收。如果程序在垃圾收集器释放对象之前结束,这种情况就可能会出现。因此,概括地说,你永远无法保证可供收集的对象总是会被垃圾收集器收集。

让我们来看看一些术语和定义:

强可及对象(Strongly  Reachable):可以通过强引用访问的对象。

软可及对象(Softly  Reachable):不是强可及对象,并且能够通过软引用访问的对象。

弱可及对象(Weakly  Reachable):不是强可及对象也不是软可及对象,并且能够通过弱引用访问的对象。

虚可及对象(Phantomly  Reachable):不是强可及对象、软可及对象,也不是弱可及对象,已经结束的,可以通过虚引用访问的对象。

清除:将引用对象的refernce域设置为null,并将引用类在堆中引用的对象声明为可结束的。

SoftReference类:SoftReference类的一个典型用途就是用于内存敏感的高速缓存。SoftReference的原理是:在保持对对象的引用时保证在JVM报告内存不足情况之前清楚所有的软引用。关键之处在于,垃圾收集器在运行时可能会(也可能不会)释放软可及对象。对象是否被是否取决于垃圾收集器的算法以及垃圾收集器运行时可用的内存数量。

WeakReference类:WeakReference类的一个典型用途就是规范化映射(Canonicalized  Mapping)。另外,对于那些生存期相对较长而且重新创建的开销也不高的对象来说,弱引用也比较有用。关键之处在于,垃圾收集器运行时如果碰到了弱可及对象,将释放  WeakReference  引用的对象。然而,请注意,垃圾收集器可能要运行多次才能找到并释放弱可及对象。

PhantomReference类:PhantomReference  类只能用于跟踪对被引用对象即将进行的收集。同样,它还能用于执行  pre-mortem  清除操作。  PhantomReference  必须与  ReferenceQueue  类一起使用。需要  ReferenceQueue  是因为它能够充当通知机制。当垃圾收集器确定了某个对象是虚可及对象时,  PhantomReference  对象就被放在它的  ReferenceQueue  上。将  PhantomReference  对象放在  ReferenceQueue  上也就是一个通知,表明  PhantomReference  对象引用的对象已经结束,可供收集了。这使您能够刚好在对象占用的内存被回收之前采取行动。  

在某些场合引用类还是很有用的,具体可以参考文章Java2引用类使用指南(http://www-128.ibm.com/developerworks/cn/java/j-refs/index.html)。

6)            尽可能少的减少不必要对象的生成

尽可能减少在循环中创建对象,使用StringBuffer而不要使用String来做连接操作等等。

7)            改变对象的创建时机

通过提前创建对象或延迟到使用时再创建对象,来做到性能优化和避免创建过多的对象。
分享到:
评论

相关推荐

    J2EE调优 应用程序调优等

    #### 二、应用程序调优 ##### 2.1 通用代码调优 - **减少对象创建**:对象的创建成本较高,应尽量减少不必要的对象创建。可以利用缓存或重用机制来减少对象的创建次数。 - **代码简化**:避免过度复杂的代码结构,...

    Oracle数据库调优之-SQL执行计划粗解

    数据库调优,其中一个重点就是应用程序的SQL调优...简而言之,读懂和了解SQL的执行计划,是应用程序调优的基础。 需要注意的是,不同的数据库的版本的调优方式有所不同,以下所有的测试结果都是基于Oracle11gr2的版本。

    Java应用调优技术讲解

    Java应用程序调优是优化Java应用程序性能的关键步骤,它涉及到对应用程序、JVM(Java虚拟机)以及操作系统层面的深入理解。在本篇讲解中,我们将重点关注HP提供的Java应用调优技术,包括HP JVM、性能工具及其对Java...

    WebLogic Server 调优

    本文将深入探讨WebLogic Server的调优技术,包括JVM调优、WebLogic Server自身调优以及应用程序调优,旨在帮助系统管理员和开发人员理解并掌握调优的核心要点。 ### 一、调优概述 调优的目标在于优化系统的响应...

    WebLogic Server 10 + 性能调优

    本文将详细介绍WebLogic Server 10的性能调优方法,涉及内核调优、Web应用程序调优、JDBC调优、EJB/MDB调优、JMS调优、应用程序调优、超时调优和诊断性能问题等方面。 内核调优主要是针对WebLogic Server的基本运行...

    J2EE 应用系统调优

    J2EE应用系统调优是确保企业级Java应用程序高效运行的关键环节。随着J2EE软件在各个行业的广泛应用,系统调优的重要性日益凸显。WebLogic Server作为业界领先的应用服务器,其在J2EE调优中的作用不可忽视。调优通常...

    weblogic平台J2EE调优策略

    首先,应用程序调优是基础。1.1.1通用代码调优强调了优化代码的重要性,避免冗余操作,选择合适的数据类型,以及合理利用池、缓冲和缓存以提高性能。1.1.2至1.1.5分别针对JDBC、Web、JMS和EJB代码进行了深入的调优...

    BEA WebLogic平台下J2EE调优攻略

    1. **应用程序调优**:审查并优化代码,减少不必要的资源消耗。 2. **应用服务器配置**:调整BEA WebLogic Server的参数设置。 3. **数据库性能调优**:优化数据库查询和索引,确保数据访问效率。 4. **操作系统和...

    WEB性能测试结果分析及调优.pptx

    WEB 性能测试结果分析的方法包括:系统监控、系统日志、多组合的测试场景、应用程序调优、服务器调优、操作系统调优等。 4. WEB 性能测试结果分析的步骤 WEB 性能测试结果分析的步骤包括:性能测试监控数据收集、...

    Java应用程序性能调优

    java应用程序性能调优,性能瓶颈在哪里 增加带宽 减少网页的http请求 加快服务器脚本计算速度 使用动态内容缓存 使用数据缓存 将动态内容静态化 更换Web服务器组件 页面组件分离 合理部署服务器 使用负载均衡 优化...

    ASP.NET应用程序性能调优.doc

    ASP.NET应用程序性能调优.doc

    性能测试应用中间件调优.

    在IT领域中,中间件的性能优化是确保应用程序稳定高效运行的关键环节之一。本文将根据给定的文件信息,深入探讨几个关键方面:JVM参数调整、WebLogic Server(WLS)参数与配置优化、操作系统配置与工具使用以及集群...

    portal61最新调优手册

    #### 复合应用程序调优 - **缓存管理器服务属性**:针对复合应用特点进行调优。 - **复合应用最佳实践**:提供一系列最佳实践指南,帮助开发者构建高性能复合应用。 #### 集群调优 - **应用服务器调优**:针对...

    sybase12.5数据库调优

    2. **应用程序调优**:涉及索引维护、SQL语句优化、数据类型匹配、长连接和短连接的选择,以及减少网络流量等。 **ASE 12.5的新性能特性** Sybase ASE 12.5版本引入了一些新的性能特性,可能包括更快的查询处理、...

    Linux application tune guide

    ### Linux应用程序调优指南知识点概览 #### 一、引言 在《Linux应用程序调优指南》这份文档中,作者们旨在帮助用户更好地理解和优化在Linux环境下的应用程序性能。随着Linux系统在服务器、工作站乃至嵌入式设备上的...

    AIX 性能调优

    应用程序调优 - **分析应用程序性能瓶颈**:使用工具如sar、vmstat等监控应用的资源消耗,识别性能瓶颈。 - **代码优化**:对性能关键路径进行代码级优化,减少不必要的计算和I/O操作。 ### AIX性能调优的工具和...

Global site tag (gtag.js) - Google Analytics