`
wenzhihua1983
  • 浏览: 77685 次
  • 性别: 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调优 应用程序调优等

    随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供商的重视。而对于最终客户来说,在一个高效、稳定地实现他们的业务需求已经是他们的基本要求。所以J2EE调优显得非常重要,而...

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

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

    weblogic平台J2EE调优策略

    第一章 应用程序调优 1.1.1 通用代码调优 1.1.2 减小没有必要的操作 1.1.3 使用合适的类型 1.1.4 尽量使用pool,buffer和cache 1.2 JDBC代码调优 1.2.1 严格资源使用 1.2.2 实用技巧 1.2.3 优化SQL语句 1.3 Web代码...

    Java应用程序性能调优

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

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

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

    j2ee应用性能调优文档

     必须保证调优后的程序运行正确。  性能更大程度是取决于良好的设计,调优技巧只是一个辅助手段。  调优过程是叠代渐进的过程,每次调优的结果要反馈到后续的代码开发中去。  性能调优不能以牺牲代码的...

    Oracle数据库应用系统调优方法介绍

    Oracle数据库应用系统调优方法介绍 为了解决这个问题,从以下几个方面:数据库服务器、网络I/O、应用程序等对整个系统加以调整,充分发挥Oracle的效能,提高整个系统的性能。

    【华为云技术分享】Nginx应用调优案例

    l 应用程序调优 从x86切换到arm之后,可以做一些代码层面、编译选项上的调优。 3 解决方案 3.1 网卡调优 3.1.1 中断绑核 中断亲和度描述为可以为特定中断提供响应的一组CPU,如果应用程序可以通过关联到相关的...

    程序性能调优技巧(数据库优化和应用优化,By_Chinasei)

    程序性能调优技巧(数据库优化和应用优化,By_Chinasei) 版权所有 郭可华 很实用的技巧,适合学习!

    Oracle数据库应用系统调优方法

    在 Client/Server环境中Client与Server之间的网络I/O是整个系统性能提高的瓶颈,一个客户应用程序引起的网络I/O越少,应用及整个系统的性能越好。减少网络I/O的方法是将应用逻辑集中在数据库服务器中。

    Windows Server 2008应用程序架构-第01部分 IIS 7.0 概览、IIS 组件、IIS 7.0 性能调优

    Windows Server 2008应用程序架构-第01部分 IIS 7.0 概览、IIS 组件、IIS 7.0 性能调优

    WebLogicServer性能及调优-调优Web应用程序[参考].pdf

    WebLogicServer性能及调优-调优Web应用程序[参考].pdf

    weblogic优化大全

    weblogic优化大全包含weblogic web应用程序调优、weblogic各个配置参数调优、集群调优、JDBC调优以及weblogic一系列优化文档! 欢迎广大weblogic爱好者下载!!!

    Spark调优 Spark应用程序性能优化

    分配更多的资源是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的,基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能...

    性能调优指南--计算机系统Java应用程序(不断完善)代码示例

    性能调优指南--计算机系统Java应用程序(不断完善)代码示例

    oracle 常用调优手段

    (2)、在Oracle共享池中固定应用程序代码; (3)、优化数据存储; (4)、优化数据排序的技术; (5)、优化SQL语句; (6)、优化回退段; (7)、优化索引; (8)、优化磁盘I/O; (9)、定期生成数据库对象的状态统计信息; ...

    tomcat性能调优总结

    在Tomcat和应用程序进行了压力测试后,如果您对应用程序的性能结果不太满意,就可以采取一些性能调整措施了,当然了前提是应用程序没有问题,tomcat性能调优总结,欢迎下载

    系统性能 系统调优 垃圾回收 企业培训PPT

    为什么J2EE应用程序性能慢? 了解系统限制和设定调优目标 建立性能调优策略 决定调优时机 ...J2EE应用程序性能调优分析 如何调优J2EE数据访问层 Jsp和servlet调优 常见应用服务器调优 Java垃圾回收机制分析

    Spring Boot应用性能调优实战:批量更新篇.zip

    在大数据量、高并发的场景下,批量更新数据库是一个常见的操作。然而,不同的批量更新方法可能带来截然不同的性能表现。 通过实际测试对比了...内容包含笔记,建表sql,添加测试数据程序以及测试代码,下载可直接运行

Global site tag (gtag.js) - Google Analytics