概述
Java性能优化个人觉得是Java进阶的必经之路。很多Java工程师对于执行代码后,底层运行的Java虚拟机可能一知半解。Java相比C/C++最大的区别是,少了内存管理。让工程师可以专注于应用主体逻辑,而不用去管理内存的使用,但这是一把双刃剑,如果让程序达到最佳的性能,是Java性能优化的初衷。
性能调优
关于Java性能调优或者是关于性能调优,有诸多的影响因素,JVM只占了整体性能的一小部分。不单单是Java虚拟机本身,还有数据库连接,网络开销等等。我们今天就专注于应用本身。
更好的算法
了解数据结构和算法的人,是非常清楚一个好的算法和一个差的算法的差距是多么大。对于应用编码本身也是一样。好方法的封装,往往可以节省更多的内存空间和时间,并且对于异常处理很到位,而不是像刚接触编程语言的小白,目的是一股脑先实现具体的功能。对于应用的编码要具有工匠精神,保证可读性的基础上去追求更好的性能。
更少的代码
同样的一个功能,更少的代码的小程序会比大程序的运行速度要快,需要编译的代码越多,等待程序启动所耗费的时间就越长,要创建和销毁的对象越多,垃圾收集的工作量就越大;要分配和持有的对象越多,GC的周期就越长;要从磁盘装载进JVM的类越多,程序启动所花费的时间就越长;要执行的代码越多,机器硬件缓存的效率就越低;而执行的代码越多,花费的时间就越长。
同样的,当引入的小功能,造成性能的小衰减,但是当应用越来越大时,累计的小衰减,会积少成多造成应用性能的显著下降。
过早优化
原话是“我们不应该把大量时间都耗费在那些小的性能改进上;过早考虑优化是所有噩梦的根源”,在应用的功能初期就需要编写可读性高,结构清晰的代码。这里所指的过早优化,并不包括避免那些已经知道对性能不好的代码结构。每行代码,如果有两种简单、直接的编程方式,那就应该选择性能更好的那种。
性能优化原则
借助性能分析来优化代码,重点关注性能分析中最耗时的操作。然而请注意,这并不意味着只看性能分析中的叶子方法,
利用奥卡姆剃刀原则诊断性能问题。性能问题最可能的原因应该是最容易解释的:新代码比机器配置更可能引入性能问题,而机器配置比JVM或者操作系统的bug更容易引入性能问题。
为应用中最常用的操作编写简单算法。以估算数学公式的程序为例,用户可以决定他所期望的最大容许误差为10%或1%。如果10%的误差适合多数用户,那么优化代码就意味着即便误差范围缩小为1%,但是速度变慢了
最近小编刷到这份高效存储让项目性能起飞的性能优化的资源库,包含Redis,MongoDB,Mysql性能优化**【+jcc4261获取】**解决你在项目开发过程中的困惑以及面试时的焦虑。
第一份笔记: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
-
安全认证