公司投入人力物力成本开发出的程序,如果出现程序瘫痪、界面停顿、抖动、响应迟缓等问题,会大大降低用户体验,损失大量用户。对于上述问题,都是需要性能调优来解决的问题。
程序性能主要表现在代码的执行速度、软件系统的内存分配是否合理、代码的启动加载时间是否够长、软件系统的负载承受能力是否足够等方面。
常见的系统瓶颈如下:
磁盘I/O:磁盘io读写速度远小于内存读写,低效的磁盘io会拖垮整个系统。
网络传输:代码需要对互联网上的数据进行读写,由于网络环境的不确定性,网络读写的速度较慢也会成为系统性能瓶颈。
CPU资源抢占:系统中存在科学计算、3d渲染等对cpu资源长期占用的操作,也会造成其他操作cpu资源抢占时的性能问题。
异常捕获:异常捕获和处理较为消耗资源,程序中过多捕获异常也会造成性能问题
数据库操作:大部分系统需要数据库读写查询,如果数据读写耗时较长也会拖死整个系统。
高并发场景下的锁竞争:在高并发场景下,为了防止并发问题时常需要加锁,在锁资源抢占时,会造成系统的性能问题。
系统内存的分配:内存和磁盘的比例要合理,内存过小也会成为系统读写
的瓶颈。
对于很多刚刚入门学习Java的学员而言,如何更好的学习到Java的相关理论知识很重要。除了多打代码之外,那么掌握一些简单有效的Java性能优化小技巧,不仅仅有利于更好的运用Java编程语言,同时还能提高程序性能!
今天小编就来分享一份Alibaba内部的720页Java程序性能优化实战手册,上线之后大获好评!当时看完这份资料的时候,感到首先就Java的方方面面讲得比较全,但是不乱。而且每个点都讲得比较清楚,读下来也没有什么盲点。干货非常多。国内少有的能写得这么好的。我看了收获很多。
核心内容
把细节打磨得极其突出
以前我以为写的代码要崩溃是件挺困难的事情,但是现在发现貌似系统瘫痪也挺常见的……
当遇到系统瘫痪,所做的办法也不过是通过Linux命令查找线上环境的性能指标,查看dump日志,然后查代码,最后定位问题。看起来是一个很简单的步骤,但是这里每一步都考验着基础和功底。
我以为,要想做好Java性能调优,有几点是很重要的。
第一,是计算机相关的基础要足够扎实。我们需要熟悉计算机组成原理、操作系统、数据库等等基础知识。这样才有可能在纷繁复杂的系统中找到调优的点。
其次,要透过源码来熟悉技术的本质。我经常觉得,只通过技术论坛上学到的技术是不够的,那些都是生产者消化后总结的知识点。我们需要去深入源码,自己去分析学习和总结,这样才能更客观地学习一项技术,而且还要能通过源码来学习别人的思维方式。
最后,则是要善于总结。使用一项技术,不能仅仅停留在“可以用”“好用”等方面,而是要善于去追问:为什么要使用,使用对系统性能有什么提升?和其他的技术对比好处在哪?其原理又是什么?唯有在理解这些问题之后,才能在遇到性能问题的时候,及时地想到解决方案。