Java性能优化心得

本文分享了一位开发者在性能优化上的经验,从简单的傻瓜式优化如使用jstack、yourkit、arthas等工具,到深入优化,包括分析GC、飞行记录以及处理严重GC问题的方法。在一次实际调优中,通过深入优化将处理3500多条参数的时间从60秒降低到1.6秒。
摘要由CSDN通过智能技术生成

这是篇总纲性的性能优化心得,并不涉及具体的算法调优与业务场景

傻瓜式优化

我把程序优化的初级阶段称为傻瓜式优化。傻瓜式的好处在于简单、明了、见效快。缺点就是这样的优化存在优化瓶颈,可能无法达到我们预期的性能指标。在程序性能调优过程中最常见的就是这种傻瓜式的优化。

傻瓜一式

当项目上出现性能问题,如果是针对特定操作的性能问题,那可以通过jstack pid来看线程dump,从线程dump中大概率可以看到比较明显的问题。然后我们进行针对性的调优即可。比如,for循环中查询数据库。在傻瓜一式中有很多工具都可以给我们提供帮助,我经常使用的是这三个工具:jstackyourkitarthas

傻瓜二式

  1. 如果项目上线后,任何操作都比较慢,可以先通过jstat -gccause pid 2000来观察一下gc。当确定gc存在一定的问题时,我们可以通过jcmd pid JFR.start name=test duration=60s settings=profile filename=output.jfr来创建飞行记录。通过飞行记录找到对应的优化点。

    飞行记录功能需要手动开启:

    1. 在启动命令中添加-XX:+UnlockCommercialFeatures -XX:+FlightRecorder可以开启飞行记录功能。
    2. 也可以通过jcmd pid VM.unlock_commercial_features来在线开启飞行记录功能
  2. 如果系统存在严重的gc问题,频繁fullgc,并且jvm已经失去响应。那可以在重启服务时添加启动参数-XX:+HeapDumpAfterFullGC或者通过jinfo -flag +HeapDumpAfterFullGC pid线上开启。这个参数的效果是每次fullgc之后,系统会自动生成一个堆dump,我们可以通过堆dump来分析内存问题。用完后一定要关闭这个参数。

深入优化

某些核心逻辑可能仅仅是傻瓜式的优化无法达到我们预期的性能指标,这时就需要进行深入优化了。执行深入优化的开发人员必须满足以下要求:

  1. 完全了解待优化代码的业务逻辑
  2. 具备一定的性能优化经验
  3. 有自己独立思考的意识,能从不同的角度观察和解决问题

深入优化一般会伴随代码的重构,所以当优化完毕后,需要进行完善的测试才能上线。

分享一下最近做的一次性能调优

最近的一次性能调优中,有3500多条参数需要处理,之前的逻辑跑完需要60秒,采用傻瓜式优化方式优化到了15秒,但是还是太慢了。采用深入优化,从根本上寻求解决问题的方式,最后只需要1.6秒就可以将3500多条参数全部处理完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值