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

本文分享了在程序性能优化方面的实践经验,包括使用VisualVM等工具定位瓶颈、改进I/O操作、利用HashMap替代迭代器、合理放置数据获取代码以及采用合适的设计模式。强调了20%的代码可能占用80%的运行时间,指出I/O性能、防御性权衡和数据结构选择的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

比较规范的方法在“代码调优”的相关章节已有解释,例如下面这篇博客
https://blog.youkuaiyun.com/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(),而其是不变的,这个调用时间完全可以避免,所以不如放在外面。

设计模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值