Java 性能优化方向

Java 性能优化方向,第1张

Java 性能优化方向

一、概述
上篇说到如果SQL本身解决不了了,就要上升到表结构,业务代码、架构层面。

  • 表结构(冗余、拆分、not null等)
  • 业务层代码的优化(减少IO调用)
  • 架构优化(缓存、主从集群读写分离、分库分表)

二、如何定位性能瓶颈

CPU 、 磁盘IO、 网络IO、内存 [监控系统]

参考:
jvm问题排查
jvm性能优化
mysql性能优化

三:执行调优策略

性能调优的目标, 在不影响程序正确性的情况下,去提高程序的运行效率。

局部视角

  • 池化技术(对象池、内存池、连接池)
  • 锁优化(无锁化设计 或者 降低锁的粒度、分布式锁)
  • 预处理(cpu的缓存行 、 mysql -Page Cache 预读取机制(Buffer Pool))
  • 批处理(减少网络包的传输次数)
  • JVM 、参数调优
  • Mysql 、 参数调优
  • Tomcat 、 参数调优

Tomcat:

  • 连接数量(socket.accept)
  • 如何在应用层面去支撑更多的链接数量(NIO机制)
  • 线程池
  • 异步编程想

总结:

业务逻辑的处理本质上就是IO *** 作;

  • 查询数据库(磁盘IO)
    • 数据库层面的基本优化(Mysql )
    • 减少查询数据库的次数(缓存的使用(多级缓存))
  • 访问磁盘(磁盘IO)
    • 文本的解析和存储
    • 磁盘的页缓存(同步、异步刷盘 )
    • 顺序读写
    • 零拷贝(mmap、sendfile)
    • SSD(固态)- HDD (机械磁盘)
    • 减少访问磁盘的场景(缓存的使用(多级缓存))
    • 异步化(最有效的武器)
  • 网络通信(远程通信、网络IO)
    • 池化技术(一次性创建多个连接)
    • 长连接
    • 长轮询
    • 异步回调
    • 同网段通信
    • 批处理(减少网络包的传输次数)
    • 数据压缩(减少网络包传输的大小) -> 序列化算法 protobuf
    • 减少网络通信的场景(缓存的使用(多级缓存))
  • 内存运算(内存IO)
    • 内存缓存
  • 异步化设计
    • 线程的设计(多线程)
    • MQ的使用
  • 使用合适的数据结构算法(数组、链表、树、图、栈、Hash表、跳跃表不同的数据结构涉及到不同时间复杂度)
  • 最后JVM优化

宏观视角

  • 硬件资源
    • 垂直扩容
    • 水平扩容
  • 软件架构
    • 异步化架构
    • 分布式微服务(负载均衡、熔断限流、多级缓存等)
    • 集群架构

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/740574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存