`
wangqiang6028
  • 浏览: 86242 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

提升你的Java应用性能:改善数据处理

    博客分类:
  • Java
阅读更多

原文作者: 贾小骏

原文地址: http://my.eoe.cn/morefree/archive/5999.html

 

许多应用程序在压力测试阶段或在生产环境中都会遇到性能问题。如果我们看一下性能问题背后的原因,会发现很多是由数据处理不当造成。数据处理在应用面对大数据量时是非常关键的。这里有一些实用的数据处理技巧可以帮助更好地提升Java应用程序性能。

减少数据传输

在任何Java应用程序中,方法调用要么是为调用方完成某项任务,要么是对输入数据进行处理。这两个目标都需要在调用者和处理方法之间进行数据交换。关于最小化函数传入和输出的数据量有一个经验之谈:数据越小好处越多。比如越小的数据处理就越少,需要清理的对象越少,内存的占用也更少等等。程序设计应当努力减少不同方法、层次和应用程序之间,甚至组织之间的数据传递。通过下面将要讨论的源端数据处理可以达成这个目标。

延迟加载

延迟数据加载是指直到实际需要最后一刻才从数据存储中获取数据。在面对重量级对象时这是非常有益的。例如有一个存储在数据库中的文件实体,文件包含blob以及与其他属性。blob大小可以从几KB到几十兆。中间层逻辑在显示文件内容之前都只依赖于其他属性。使用延迟加载可以用来处理这个blob属性。

不断重复数据调用

当进行远程调用时,从数据提供者反复调用取得数据会严重影响性能,比如数据库调用、Web服务调用或者其他编解码调用。这种情况下可以使用Facade模式一次获得所有所需的数据,尽可能减小连接成本和在网络上传输数据的成本。

 

高速缓冲

经常使用但不经常变化的数据可以进行缓存,通常需要缓存的是静态或者服务端数据。如今,对应用事务数据也有很高的要求,这些数据也需要加入缓存。作为一个简单的规则,在设计应用程序时经常需要识别这类实体并缓存到合适的位置,通常这些实体不会频繁改变甚至根本不会变化。刷新对象时也可以采用这个规则。

在源端处理数据

在数据源或存储位置本身进行处理是一个好习惯。将大量数据发送给客户端然后再进行处理需要传输成本,而且有时客户端的处理逻辑会改变数据格式。例如在oracle中过滤数据比较简单,只要为查询添加一个WHERE子句即可。而在Java程序中过滤这么数据需要先获取记录再逐行挨个属性进行比较。因此用Java可能不是最佳实现。

尽可能减少数据转换和避免不正确的数据类型

将数据从一种格式转换到其他格式需要转换成本。对单个值进行转换消耗的性能可能微不足道,但如果记录个数成千上万性能问题就十分明显。例如选择String数据类型的值,并把它转换为double或其他基本类型,反之亦然。

保持数据的正确采集

从性能的角度来看,这是一个非常重要的考虑因素。 Java已经提供了不同的集合以满足不同的需求,例如有几种原始的集合,比如ArrayList,你可以不断向ArrayList添加数据并且集合本身不会对数据进行任何操作。再比如Vector提供了同步的操作。我需要在插入数据时保持同步吗?这是一个很好的问题。如果不需要同步那么就不要使用Vector,使用ArrayList或根据要求选择他集合。

对数据处理算法进一步优化

有时候性能问题是数据处理算法或实现逻辑造成的。实现逻辑应该将性能作为要求达到的一个目标,像是内存占用等。通过以下几个方法可以使算法进一步优化:

  • 优化开销很大的调用和数据库循环调用
  • 优化循环里的对象声明
  • 避免不必要的嵌套循环
  • 将对象存储到多个集合

Finalize重型数据对象

我们不能保证会立即执行垃圾收集,但是为对象设置为final或置为null是一个很好的做法。

利用技术特点优化数据处理

许多技术都有助于数据处理,其中包含了上面提到的一些要点。下面是几个例子:

  • Oracle的prepared statement
  • 缓存框架,例如Hibernate的一级缓存和二级缓存
  • Hibernate框架的延迟加载机制
  • 数据序列化和反序列化

在设计时需要避免性能代价过高的操作。如果没有这样的操作,还可以把数据转换减到最小。例如在Web应用程序可以尽量减少会话的输出数据。

并行处理数据

如果需要处理的数据量很大,那么可以并行处理不相关的数据以减少总的处理时间。

对象重用

对于重量级对象不要从头创建,可以对现有对象进行克隆并且只修改必要的属性尽可能重用现有的信息。通过浅拷贝和深拷贝来控制重用的数量。

 

 

分享到:
评论

相关推荐

    提升你的Java应用性能改善数据处理Java开发Java经

    提升你的Java应用性能改善数据处理Java开发Java经验技巧共4页.pdf.zip

    Java优化编程(第2版)

    Java优化编程(第2版)通过丰富、完整、富有代表性的实例,展示了如何提升Java应用性能,并且给出了优化前与优化后的Java应用程序的性能差别,以实际的实例与数字告诉你,为什么不可以这么做,应该怎么做,深入分析...

    SSM项目的陆丰市医院分诊管理系统.zip

    4. **数据库设计**:系统后端可能采用了MySQL或其他关系型数据库来存储患者信息、医生信息、预约记录等数据,同时采取了适当的索引和查询优化措施以提升性能。 5. **用户体验**:系统提供了直观的用户界面,使得医务...

    最新基于SSM框架艺诚美业管理系统.zip

    该系统采用Spring、SpringMVC和MyBatis(SSM)集成框架开发,旨在通过技术手段帮助美业企业提升管理效率、改善顾客服务体验,并优化业务流程。 系统的主要功能可能包括: 1. **顾客管理**:记录顾客的基本信息、...

    最新基于SSM框架医院打卡挂号系统.zip

    - **性能优化**:MyBatis框架提供了优秀的SQL编写和数据库操作能力,可以有效提升系统的性能。 综上所述,基于SSM框架的医院打卡挂号系统提供了一个高效、方便、安全的解决方案,用于改善医院的挂号和候诊流程。...

    最新基于SSM框架智能停车场管理系统.zip

    - **性能优化**:MyBatis框架提供了优秀的SQL编写和数据库操作能力,可以有效提升系统的性能。 综上所述,基于SSM框架的智能停车场管理系统提供了一个高效、灵活且易于维护的平台,用于加强和改进停车场的管理和...

    SpringBoot项目基于springboot的智能家居系统.zip

    系统的架构设计注重性能、可用性和可维护性,以支持高并发的设备控制和数据处理。其模块化的设计也便于未来根据智能家居技术的新发展增加新功能或升级现有功能,确保软件的长期适用性和技术前瞻性。

    最新基于SSM框架宠物医院信息管理系统.zip

    - **性能优化**:MyBatis框架提供了优秀的SQL编写和数据库操作能力,可以有效提升系统的性能。 综上所述,基于SSM框架的宠物医院信息管理系统提供了一个高效、灵活且易于维护的平台,用于加强和改进宠物医院的管理...

    最新基于SSM框架房屋租赁系统.zip

    - **性能优化**:MyBatis框架提供了优秀的SQL编写和数据库操作能力,可以有效提升系统的性能。 综上所述,基于SSM框架的房屋租赁系统提供了一个高效、灵活且易于维护的平台,用于加强和改进房屋租凭的管理和服务。...

    ASP EXCEL导入SQL

     文件服务器与应用服务器是分布式的,通过Map-Reduce进行任务的拆分与结果的合并,充分利用多台服务器的并行计算能力,提升整体平台的运行性能;  文件缓存采用多级缓存策略,解决命中率高的文件的频繁请求。而...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

Global site tag (gtag.js) - Google Analytics