概述
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
- 安全认证