做 Java 后端开发可能会涉及的一些性能优化

2020-02-06 17:16:48 +08:00
 netty
突然看到前 2 年前自己在一篇文章写的评论,感觉写得还行,大家看看有没有问题和补充的地方。

原评论内容如下:

陈大讲的比较有高度,我来说点具体的,做 Java 后端开发可能会涉及的一些性能优化。进程内缓存,如用 Map、List 来缓存一些基础数据。如果需要更灵活的操作缓存数据,如自动过期或定期更新,可以使用 Guava 的 LoadingCache。为了减少对 Java GC 的影响,或者避免用户态与内核态的数据拷贝成本,也可以使用直接内存。但要小心使用,无节制的使用或者没回收内存将可能带来灾难性的后果,例如 Netty 就有监测是否有内存泄漏的开关,Netty 在这方面已经玩得很溜了。大数据量的缓存,或者需要支持分布式访问,可以考虑使用 Redis,记得设置过期时间哦。对于不需要实时响应或同步处理的请求,可以通过消息队列来实现异步化,根据实际业务场景来异步反馈结果,或者只须持久化数据。消息队列在削峰方面非常有用,可以很好的应对突发流量,或者是业务在促销期间的高峰,从而让业务下游可以平滑的处理请求。应用服务间的调用可以采用批量发送来提高吞吐。IO 密集型的操作或调用可以适当增加线程数,调高调用线程数对于跨机房调用有非常大的提升作用。服务之间尽量同机房或就近机房部署,降低延迟。减少大对象,降低对象存活时间,从而降低 Full GC 的可能性。有些语言或第三方的 API 内部逻辑很耗时,必要时可自己实现,如 BeanUtils.copyProperties 方法。无锁化,如数据分片存储,ThreadLocal。减小锁粒度,减小锁的范围,通常锁代码块优于锁方法。使用乐观锁,如 Java 中的原子类采用自旋+CAS。
2496 次点击
所在节点    Java
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/642572

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX