For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
依旧在加班,一小伙伴微信说:小编总,听说你在搞性能优化相关的东西,但我平时项目中根本碰到这些性能问题,怎么办?
类似问题,听到过很多次,业务项目中,哪有那么多的性能问题,就算碰到了,也大多数是数据库的瓶颈,花精力去优化代码,还不如花时间去找出慢执行的sql,瞬间提升200%的性能,或加一层缓存,接口响应嗖嗖的。
所以,如果系统的运行状况正如你的期望,就没必要花费更多精力在额外的性能提升上,但对于一些核心的大流量服务,比如美团的外卖系统,高峰期的时候,流量惊人,需要压榨每个代码点的性能了。
要记住,在进行代码优化时,无外乎两个目的:
减小代码行数
提高代码运行效率
下面分享一些优化技巧,有了这些经验,代码肯定慢不了!
1、大量数据复制
当复制大量数据时,建议使用System.arraycopy()方法
2、用final修饰类,可以执行更快?
看到很多文章说:Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,能够使性能平均提高50%.
我想说,bullshit,JDK有自己的类层次分析(CHA),可以分析出哪些类和方法没有被继承,从而进行智能优化。
3、日志打印,有没有问题?
很多时候,我们会用slf4j以下方式进行日志信息打印
#("debug {}", name);
结果后面实现是这样的:
每次输出日志,都要遍历“{}”,然后再进行拼接,性能可想而知。
4、修改 -XX:AutoBoxCacheMax
大家应该都知道这是Integer的缓存,默认范围是-128 ~ 127,如果把该参数调大之后,比如提升到20000,虽然牺牲一点内存,但是服务整体性能可以提升不少
5、Netty的优化
1、使用 AtomicIntegerFieldUpdater,性能更优 2、 FastThreadLocal 到底有多fast? 3、 IntObjectHashMap,通过微基准测试,性能提升 50%
6、Random or ThreadLocalRandom
在高并发应用中,更应该使用 ThreadLocalRandom,而不是原始的 Random
对于Java性能优化,我想说:路漫漫其修远兮,吾将上下而求索。
这条路很长,很多时候,只能靠平时的经验积累,不仅要理解系统架构、应用代码,还需要关注 JVM 层甚至操作系统底层。有时候,深入理解 Java 底层源码就能达到事半功倍的效果。