• GitHub标星86k+的Redis/MongoDB/Mysql性能优化宝典,令人叹服


    概述

    Java性能优化个人觉得是Java进阶的必经之路。很多Java工程师对于执行代码后,底层运行的Java虚拟机可能一知半解。Java相比C/C++最大的区别是,少了内存管理。让工程师可以专注于应用主体逻辑,而不用去管理内存的使用,但这是一把双刃剑,如果让程序达到最佳的性能,是Java性能优化的初衷。

    性能调优

    关于Java性能调优或者是关于性能调优,有诸多的影响因素,JVM只占了整体性能的一小部分。不单单是Java虚拟机本身,还有数据库连接,网络开销等等。我们今天就专注于应用本身。

    更好的算法

    了解数据结构和算法的人,是非常清楚一个好的算法和一个差的算法的差距是多么大。对于应用编码本身也是一样。好方法的封装,往往可以节省更多的内存空间和时间,并且对于异常处理很到位,而不是像刚接触编程语言的小白,目的是一股脑先实现具体的功能。对于应用的编码要具有工匠精神,保证可读性的基础上去追求更好的性能。

    更少的代码

    同样的一个功能,更少的代码的小程序会比大程序的运行速度要快,需要编译的代码越多,等待程序启动所耗费的时间就越长,要创建和销毁的对象越多,垃圾收集的工作量就越大;要分配和持有的对象越多,GC的周期就越长;要从磁盘装载进JVM的类越多,程序启动所花费的时间就越长;要执行的代码越多,机器硬件缓存的效率就越低;而执行的代码越多,花费的时间就越长。
    同样的,当引入的小功能,造成性能的小衰减,但是当应用越来越大时,累计的小衰减,会积少成多造成应用性能的显著下降。

    过早优化

    原话是“我们不应该把大量时间都耗费在那些小的性能改进上;过早考虑优化是所有噩梦的根源”,在应用的功能初期就需要编写可读性高,结构清晰的代码。这里所指的过早优化,并不包括避免那些已经知道对性能不好的代码结构。每行代码,如果有两种简单、直接的编程方式,那就应该选择性能更好的那种。

    性能优化原则

    借助性能分析来优化代码,重点关注性能分析中最耗时的操作。然而请注意,这并不意味着只看性能分析中的叶子方法,
    利用奥卡姆剃刀原则诊断性能问题。性能问题最可能的原因应该是最容易解释的:新代码比机器配置更可能引入性能问题,而机器配置比JVM或者操作系统的bug更容易引入性能问题。
    为应用中最常用的操作编写简单算法。以估算数学公式的程序为例,用户可以决定他所期望的最大容许误差为10%或1%。如果10%的误差适合多数用户,那么优化代码就意味着即便误差范围缩小为1%,但是速度变慢了

    **最近小编刷到这份高效存储让项目性能起飞的性能优化的资源库,包含Redis,MongoDB,Mysql性能优化,解决你在项目开发过程中的困惑以及面试时的焦虑。

    第一份笔记:MySQL高级调优笔记

    关于这份性能优化的资源库,我只能在文章中展示部分的章节内容和核心截图

    第一部分 : MySQL 常用对象

    • Linux系统安装
    • MySQL
    • 素引
    • 视图
    • 存储过程和函数
    • 触发器

       

    第二部分 : MySQL体系结构,存储引擎及SQL优化

    • Mysq的体系结构概览
    • 存储引擎
    • 优化SQL步骤
    • 索引的使用
    • SQL优化

       

    第三部分 : MySQL缓存,参数调整及锁

    • 应用优化
    • Mysq|中查询缓存优化
    • Mysq|内存管理及优化
    • Mysq|并发参数调整
    • Mysq|锁问题
    • 常用SQL技巧

       

    第四部分 : MySQL 常用工具、主从复制及综合案例

    • Mysql中常用工具
    • Mysql日志
    • Mysq|复制
    • 综合案例

       

    第二份笔记:Redis:核心原理和应用实战

    基础部分

    • Redis基础数据结构
    • 容器型数据结构的通用规则

    应用部分

    • 分布式锁
    • 延时队列
    • 位图
    • 布隆过滤器
    • 简单限流
    • 漏斗限流

    原理部分

    • 线程 IO模型
    • 通信协议
    • 持久化
    • 管道
    • 事务
    • PubSub
    • 小对象压缩
    • 主从同步

    集群部分

    • Sentinel
    • Codis
    • Cluster

    拓展部分

    • Stream
    • Info 指令
    • 再谈分布式锁
    • 过期策略
    • LRU
    • 懒惰删除
    • 优雅地使用 Jedis
    • 保护 Redis
    • Redis 安全通信

    源码部分

    • ** 「字符串」内部结构**
    • ** 「字典」内部**
    • 「压缩列表」内部
    • 「快速列表」内部
    • 「跳跃列表」内部结构
    • 「紧凑列表」内部
    • ** 「基数树」内部**

       

    第三份笔记:MongoDB入门到熟练笔记

    MongoDB快速上手

    • MongoDB相关概念
    • 单机部署
    • 基本常用命令,查看当前正在使用的数据库命令
    • 索引
    • 文章评论实战案例

    MongoDB-集群安全

    • 副本集-Replica Sets
    • 分片集群Sharded Cluster
    • 安全认证

  • 相关阅读:
    经典Java面试题汇总及答案解析
    Netty(二)NIO-入门
    摄像头每路视频每天到底产生多少数据?
    vue 实现语音播报
    AI对话系统app开源
    Vue 禁止输入框输入空格
    java语音识别的图书检索系统
    IPsec封装问题详解
    计算机毕业设计(附源码)python医院预约挂号管理系统
    Optional源码解析与实践
  • 原文地址:https://blog.csdn.net/m0_57042151/article/details/127426419