java性能优化字符串过滤

java性能优化字符串过滤

ID:8972045

大小:46.86 KB

页数:3页

时间:2018-04-13

java性能优化字符串过滤_第1页
java性能优化字符串过滤_第2页
java性能优化字符串过滤_第3页
资源描述:

《java性能优化字符串过滤》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Java性能优化:字符串过滤首先描述一下需求,具体如下:给定一个String对象,过滤掉除数字(字符'0'-'9')以外的其它字符。要求时间开销尽可能小。过滤函数的原型如下:Stringfilter(Stringstr);针对上述需求,我们用了4个不同的过滤函数。为了叙述方便,分别称为filter1到filter4。其中filter1性能最差、filter4性能最好。好了不多说我们先来看一下代码:★代码实现◇测试代码为了方便测试性能,先准备好一个测试代码,具体如下:测试字符串为“D186783E36B

2、721651E8AF96AB1C4000B”。◇版本1先来揭晓性能最差的filter1,代码如下:为了和后续对比,先记下filter1的处理时间,大约在4.8-4.9秒之间。◇版本2再来看看filter2,代码如下:filter2的处理时间大约为1.7-1.8秒,提升了大约3倍。◇版本3然后看看filter3,代码如下:Filter3和filter2差别也很小,唯一差别就在于调用了StringBuffer带参数的构造函数。通过StringBuffer的构造函数设置初始的容量大小,可以有效避免appen

3、d()追加字符时重新分配内存,从而提高性能。Filter3的处理时间大约在1.6-1.7秒。约提高6%◇版本4最后来看看终极版本,性能最好的filter4。你可能会想:filter4和前几个版本的差别也挺大了吧!filter4既没有用String也没有用StringBuffer,而是拿字符数组进行中间处理。Filter4的处理时间,只用了0.2-0.3秒,相对于filter3提升了将近8倍。是不是因为直接操作字符数组,节省了append(char)的调用?通过查看append(char)的源代码,内部

4、的实现很简单,应该不至于提升这么多。那是什么原因捏?虽然filter4有一个字符数组的创建开销,但是相对于filter3来说,StringBuffer的构造函数内部也会有字符数组的创建开销。两相抵消。所以filter4比filter3还多节省了StringBuffer对象本省的创建开销。所以节约了性能。★对4个方法的总结上述4个方法,filter1和filter4的性能相差19倍。几个版本都是通过节省内存分配,降低了时间开销★一点补充说明,关于时间和空间的平衡另外,需要补充说明一下。Filter3和f

5、ilter4使用了空间换时间的手法来提升性能。假如被过滤的字符串很大,并且数字字符的比例很低,这种方式就不太合算了。举个例子:被处理的字符串中,绝大部分都只含有不到10%的数字字符,只有少数字符串包含较多的数字字符。对于filter3来说,可以把newStringBuffer(nLen);修改为newStringBuffer(nLen/10);来节约空间开销。但是filter4就没法这么玩。所以,具体该用filter3还是filter4,要看具体情况了。只有在你非常看重时间开销,且数字字符比例很高(至

6、少大于50%)的情况下,用filter4才合算。否则的话,建议用filter3。以上的数据在我自己的机子上测试是这样的(我是用Java环境是JDK1.6.0)。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。