【个人总结】关于程序性能提高的一点心得

前言

比较规范的方法在“代码调优”的相关章节已有解释,例如下面这篇博客
https://blog.csdn.net/Swocky/article/details/90522476
这里总结一下自己在实验过程中的一些比较分散的经验。

概述

对于大多数程序,运行速度极慢甚至跑不出来的原因往往不是均摊的,而是集中于某一个的代码块,甚至某一行代码。可以说,大多数情况是"20%的代码"占了“80%的运行时间”。
而我们需要做的便是在性能优化时找到这“一行代码”。对于Java程序,可以使用Visual VM,MAT等工具,对当前状态进行剖析,从而找到优化点。
优化分为时间性能优化和空间性能优化,通常可以通过好的设计模式、算法以及一些数据结构和小的细节予以提高。

I/O性能

I/O性能由于读取速度的限制,往往制约一个程序的运行速度,尤其是大规模存取。对于I/O性能的提升,可以采用比较好的I/O方式,例如bufferreader、NIO,速度都是相对很快的。但要注意,I/O流的开关不要关于频繁,否则十分损坏性能,没写完之前可以先将其存到一个例如HashMap的低索引复杂度的数据结构。

防御性权衡

防御性代码要考虑其性能成本,不能随意使用,而要有一个比较好的层次设计,把防御性判断放在一些比较有效执行次数又相对少的地方,这样可以起到一个“一夫当关万夫莫开”的作用,这就是设计上的问题了。当然,高健壮性与高性能往往是互相影响的,需要在这之间做比较好的权衡与考虑。

通过Hash Collection替代迭代器

很多地方为了检索数据,需要遍历一个ArrayList,或者一个Vector等,对于大规模的数据这个过程是相当慢的,而且重复迭代会造成巨大的资源消耗。例如有100万条数据,每个数据都需要与其他对比,这样的复杂度显然是极高的,可以使用HashMap进行存在性判断,而避免自己编写的迭代方法。

数据获取的位置

典型的例子for (int i = 0; i < list.size(); i++),每次迭代都需要调用一次size(),而其是不变的,这个调用时间完全可以避免,所以不如放在外面。

设计模式

正如上面提到的,好的设计模式能够有效地提高程序性能,具体参考二十多种设计模式。

发布了75 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Swocky/article/details/90814896