V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
netty
V2EX  ›  Java

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

  •  
  •   netty · 2020-02-06 17:16:48 +08:00 · 2376 次点击
    这是一个创建于 1534 天前的主题,其中的信息可能已经有所发展或是发生改变。
    突然看到前 2 年前自己在一篇文章写的评论,感觉写得还行,大家看看有没有问题和补充的地方。

    原评论内容如下:

    陈大讲的比较有高度,我来说点具体的,做 Java 后端开发可能会涉及的一些性能优化。进程内缓存,如用 Map、List 来缓存一些基础数据。如果需要更灵活的操作缓存数据,如自动过期或定期更新,可以使用 Guava 的 LoadingCache。为了减少对 Java GC 的影响,或者避免用户态与内核态的数据拷贝成本,也可以使用直接内存。但要小心使用,无节制的使用或者没回收内存将可能带来灾难性的后果,例如 Netty 就有监测是否有内存泄漏的开关,Netty 在这方面已经玩得很溜了。大数据量的缓存,或者需要支持分布式访问,可以考虑使用 Redis,记得设置过期时间哦。对于不需要实时响应或同步处理的请求,可以通过消息队列来实现异步化,根据实际业务场景来异步反馈结果,或者只须持久化数据。消息队列在削峰方面非常有用,可以很好的应对突发流量,或者是业务在促销期间的高峰,从而让业务下游可以平滑的处理请求。应用服务间的调用可以采用批量发送来提高吞吐。IO 密集型的操作或调用可以适当增加线程数,调高调用线程数对于跨机房调用有非常大的提升作用。服务之间尽量同机房或就近机房部署,降低延迟。减少大对象,降低对象存活时间,从而降低 Full GC 的可能性。有些语言或第三方的 API 内部逻辑很耗时,必要时可自己实现,如 BeanUtils.copyProperties 方法。无锁化,如数据分片存储,ThreadLocal。减小锁粒度,减小锁的范围,通常锁代码块优于锁方法。使用乐观锁,如 Java 中的原子类采用自旋+CAS。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   915 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:00 · PVG 05:00 · LAX 14:00 · JFK 17:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.