提升你的Java应用性能:改善数据处理
许多应用程序在压力测试阶段或在生产环境中都会遇到性能问题。如果我们看一下性能问题背后的原因,会发现很多是由数据处理不当造成。数据处理在应用面对大数据量时是非常关键的。这里有一些实用的数据处理技巧可以帮助更好地提升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应用程序可以尽量减少会话的输出数据。
并行处理数据
如果需要处理的数据量很大,那么可以并行处理不相关的数据以减少总的处理时间。
对象重用
对于重量级对象不要从头创建,可以对现有对象进行克隆并且只修改必要的属性尽可能重用现有的信息。通过浅拷贝和深拷贝来控制重用的数量。
本文转自:http://www.importnew.com/5674.html
提升你的Java应用性能:改善数据处理的更多相关文章
- 【转】提升你的Java应用性能:改善数据处理
提升你的Java应用性能:改善数据处理 作者:贾小骏 发布于07月26日 10:17 许多应用程序在压力测试阶段或在生产环境中都会遇到性能问题.如果我们看一下性能问题背后的原因,会发现很多是由数据处 ...
- Ehcache的视频-如何用Ehcache提升你的Java应用性能
Java应用最广的缓存(分布式缓存)Ehcache的Youtube介绍视频 (需-翻-墙)
- 影响Java EE性能的十大问题(转)
本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题 ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- Java的性能优化
http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...
- Java 应用性能调优实践
Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层.框架层.JVM 层.通过介绍 Java 性能诊断工具和思路,给出搜狗商业平台的性 ...
- [JAVA] java程序性能优化
一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...
- Java日志性能
在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天 ...
- Java GC 专家系列5:Java应用性能优化的原则
本文是GC专家系列中的第五篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种GC ...
随机推荐
- 页面嵌套 Iframe 产生缓存导致页面数据不刷新问题
最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息. 初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳.这样能 ...
- IOS 学习笔记 2015-03-24 OC-API-常用结构体
一 标题 常用结构体 二 API 1 NSRange 表示一个范围 A 实例化 NSRange rg={3,5};//第一参数是起始位置第二个参数是长度 B 实例化 NSRange rg2=NSMak ...
- 字符串匹配算法——KMP、BM、Sunday
KMP算法 KMP算法主要包括两个过程,一个是针对子串生成相应的“索引表”,用来保存部分匹配值,第二个步骤是子串匹配. 部分匹配值是指字符串的“前缀”和“后缀”的最长的共有元素的长度.以“ABCDAB ...
- Linux下Docker安装
1 在 CentOS 6.4 上安装 docker docker当前官方只支持Ubuntu,所以在 CentOS 安装Docker比较麻烦(Issue #172). docker官方文档说要求 ...
- Mysql DOC阅读笔记
Mysql DOC阅读笔记 转自我的Github Speed of SELECT Statements 合理利用索引 隔离调试查询中花费高的部分,例如函数调用是在结果集中的行执行还是全表中的行执行 最 ...
- wap开发笔记之幻灯片
最近在进行wap站研究,发现网上成熟的wap幻灯片都很难找到,在此贴出一个iphone的幻灯效果,希望对wap站开发的人有些帮助. 点此下载
- 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容
<?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...
- 在Apache下开启SSI配置支持include shtml html和快速配置服务器
作为前端开发,使用Apache快速搭建服务器极为方便. 1.找到apach安装目录,找到conf目录下 的httpd.conf 使用SSI(Server Side Include)的html文件扩展名 ...
- php实现手机拍照上传头像功能
现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递, 这个另外一种数据格式传递,使用的是$GLOBALS ...
- web2py相关-------------------------------(一)初遇
在第一次换工作的时候,希望转行 做编程,就面试了很多家,很多人问我 懂不懂html 书写,我非常诚实的告诉他们不会. 当然那时我很天真的认为,只要自己愿意学习这些都不是问题,事实证明人的学习能力是很快 ...