-
Java程序性能优化:
-
性能优化总结
性能优化是一个长期的过程,没有终止
-
首先预生产环境的性能测试,主要测试并发数对系统的CPU,JVM内存,FullGC的次数执行时间,以及tomcat连接池参数设置,得到JVM选择最好的启动参数,以及tomcat当前并发下最好的连接池
主要采用:Jmeter压力测试+JMX动态调整连接池参数查看JVM垃圾回收情况以及JVM内存的情况,然后不断的调整参数。以求压力测试的响应时间,失败率达到可接受的范围即可
-
后期项目中的性能瓶颈期优化:
主要问题,项目的FullGC次数增多,卡顿,用户体验差等
此时多数因为系统的用户增多,并发数已经超出预期的范围
-
根据80*20原则,估算并发数大约在系统访问用户数量的8%-12%,重新根据进行压力测试
,然后调整tomcat连接池相关参数,对于JVM不建议再去进行相关的参数,此时可以针对项目采用某些技术去解决,如 redis缓存,静态化技术,限流技术等待
- tomcat优化
- 主要可以减少不必要的配置,比如rest风格的服务,没有必要配置jsp和静态资源加载的相关信息
- tomcat线程池的优化,此时需要根据并发不断压力测试的调整
- 主要优化还是程序自身的算法优化
- 在finally块中关闭stream
- 使用'system.arraycopy()'来复制数组
- 实例内变量的getter/setter方法变成”final
- 不要在循环中调用synchronized()方法
- 将try/catch块移出循环
- 常量字符串用'String'代替'Stringbuffer',大量字符串拼接用StringBuffer
- 不要在循环体中实例化变量
- 尽可能的使用栈变量
- 尽量减少对变量的重复计算;比如for(int i=0;i<list.size())
- 尽量采用懒加载的策略,即在需要的时候才创建
- 如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度
- 乘法和除法使用移位操作
- 尽量在合适的场合使用单例
- 及时清除不再需要的会话
- 使用同步代码块替代同步方法