当前位置:网站首页>分布式.性能优化

分布式.性能优化

2022-08-10 23:47:00 闲猫

 

 

 

 性能优化
    代码层面
        字符串
            拼接:for内不使用+,而是StringBuilder(线程不安全)/StringBuffer(线程安全)
            分割
                split ,StringTokenizer ,indexOf 和 substring ,StringUtils
                由高到低的排序为:StringTokenizer > split ,StringUtils.split > indexOf 
        数组
            复制效率
                System.arraycopy > clone > Arrays.copyOf > for
        集合
            设置初始化容量,比如:StringBuilder,ArrayList,HashMap 等
        for
            使用Collections.EMPTY_LIST/Collections.EMPTY_SET/Collections.EMPTY_MAP,不要return null; 或者 return new ArrayList();
            遍历推荐:for (int i = 0, int length = list.size(); i < length; i++)
            for中禁止写查询数据库语句
        Hibernate/Mybatis
        锁
            减少锁持有时间(尽量缩小锁的范围)
            减小锁粒度
                使用同步方法块替代同步方法
                锁属性 替代 锁对象
            锁分离
                读写锁ReadWriteLock
                    根据功能进行分离成读锁和写锁,这样读读不互斥,读写互斥,写写互斥
            锁粗化
                锁粗化就是告诉我们任何事情都有个度,有些情况下我们反而希望把很多次锁的请求合并成一个请求,以降低短时间内大量锁请求、同步、释放带来的性能损耗。
            锁消除
                编译器级别的一种锁优化方式
                针对JDK源码中的同步代码,在编译阶段进行消除锁的一种方法
    数据库层面
        Sql
            编写Sql
                字段类型
                    数字字段优于字符字段
                    变长字段 优于 定长字段
                单表查询
                    应尽量避免在 where 子句中使用 or 来连接条件,可以考虑使用 union 代替
                    尽量避免在 where 子句中对字段进行表达式操作和函数操作
                        数据库只做单纯的CRUD
                    in 和 not in 也要慎用。对于连续的数值,能用 between 就不要用 in,exists 代替 in
                    用具体的字段替代*
                连接查询
                    join
                        能迅速减少笛卡尔积数据量的先join,条件也先靠左边
                        join条件类型最好一样,最好建立在索引上
                    子查询
                        杜绝,查询效率很差,使用join替代
            执行计划
                Explain
            慢SQL处理
        索引
            防止索引失效
                避免在Where中使用!=
            避免建立太多的索引
                一个表最多7个,否则考虑是否有必要
                离散度较好的字段建立索引,在性别建立索引意义不大
                索引降低Insert和update效率
            建立索引避免全表扫描
                比如:createtime,where&orderby 最好在索引上
        数据库配置调优
    缓存
        CDN
            用户附近缓存静态文件
        静态化技术
        客户端缓存
            浏览器
        内存级别
            ehcache
        查询级别缓存
            mysql&hibernate一级缓存
        服务间缓存
            redis&memcache&mongodb
    前端
        减少前端过度调用
    业务层面
        防止过度的代码复用
    性能和容量评估
        指标
        对象
            应用服务器
            数据库
            缓存
            消息队列
    服务器层面
        Linux
            性能监控
                top
                    查看系统负载的来源
                Linux w命令
                    得知目前登入系统的用户有哪些人,以及他们正在执行的程序
                mpstat
                    查看CPU的占用情况
                free m
                    内存分析
                iostat
                    系统的磁盘操作活动
                tail -f -n 100 最后100行
        WebServer
            tomcat线程池的配置
        JVM
            垃圾回收算法选择
            JVM参数配置调优
                检测
                分析
                调优
            工具
                分析和评估工具
            常用命令
                jps
                    jvm进程lvmid,主类类名,main函数参数, jvm参数,jar名称等信
                jmap
                    堆占用情况
                jhat
                    堆分析工具,结合jmap使用
                jstat
                    查看堆内存各部分的使用量,以及加载类的数量
                hprof
                    Heap/CPU Profiling Tool
                jstack
                     堆栈跟踪工具

原网站

版权声明
本文为[闲猫]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_42754896/article/details/126253849