课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
性能优化是程序员在开发软件的时候都会重点关注的一个编程问题,而本文我们就通过案例分析来简单了解一下,软件开发高性能代码实现方法分析。
局部性
局部性也是老生常谈的特性了,局部性有好多种,数据局部性、空间局部性、时间局部性……可以说就是因为局部性的存在,世界才能更高效地运行。更多关于局部性的内容,可以参考下我之前写的一篇文章局部性原理——各类优化的基石。
这里先说下数据局部性,在大多数情况下,只有少量的数据是会被频繁访问的,俗称热点数据。处理热点数据简单的方法就是给它加缓存加分片,具体方案就得看具体问题了。我来举个在互联网公司很常见的例子,很多业务数据都是存在数据库中,然而数据库在面对超大量的请求就有点力不从心了,因为局部性的存在,只有少量的数据是被频繁访问的,我们可以将这部分数据缓存在Redis中,从而减少对数据库的压力。
优化内存回收
垃圾回收GC(GarbageCollection)是现在高级编程语言内存回收的主要手段,也是高级语言所必备的特性,比如大家所熟知的Java、python、go都是自带GC的,甚至是连C++也开始有了GC的影子。GC可以自动清理掉那些不用的垃圾对象,释放内存空间,这个特性对新手程序猿极其友好,反观没有GC机制的语言,比如C++,程序猿需要自己去管理和释放内存,很容易出现内存泄露的bug,这也是C++的上手难度远高于很多语言的原因之一。
缩短对象存活时间
为什么减少对象的存活时间就能提升GC的性能?总的垃圾对象并没有减少啊!是的没错,单纯缩短对象的存活时间并不会减少垃圾对象的数量,而是会减少GC的次数。要理解这个就得先知道GC的触发机制,像Java中当堆空间使用率超过某个阈值后就会触发GC,如果能缩短对象的时间,那每次GC就能释放出来更多的空间,下次GC也就会来的更迟一些,总体上GC次数就会减少。
堆外内存
在Java中,只有堆内内存才会受GC收集器管理,所以你要不被GC影响性能,直接的方式就是使用堆外内存,Java中也提供了堆外内存使用的API。但是,堆外内存也是把双刃剑,你要用就得做好完善的管理措施,否则内存泄露导致OOM就GG了,所以不推荐直接使用。但是,凡事总有但是,有一些优秀开源代码,比如缓存框架ehcache就可以让你安全的享受到堆外内存的好处,具体使用方式可以查阅官网,这里不再赘述。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。