• 分布式.性能优化


     

     

     

     性能优化
        代码层面
            字符串
                拼接: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
                         堆栈跟踪工具

  • 相关阅读:
    [Java、Android面试]_20_Android的四种启动模式(高频问题)
    GameFi 行业下滑但未出局| June Report
    Python——读取MySQL数据并导出到Excel
    重装系统以后怎么还原电脑原本的资料
    MySQL 8.0 Clone 备份恢复演练
    EasyRecovery15万能数据恢复软件全面详细功能讲解
    英文ppt怎么翻译成中文?教你几种ppt翻译方法
    Pytest接口测试框架实战项目搭建(三)
    ssm基于大数据的智能公交平台的设计与实现毕业设计源码261620
    1897. 重新分配字符使所有字符串都相等
  • 原文地址:https://blog.csdn.net/weixin_42754896/article/details/126253849