第九周 性能优化(三)总结
一、内容梳理
数据库架构原理
数据库架构
连接器
语法分析器
语义分析与优化器
执行引擎
数据库核心概念
PrepareStatement 预编译
B+树
索引(聚簇索引和非聚簇索引)
数据库事务
JVM 虚拟机原理
JVM 虚拟机组成结构
![](https://static001.geekbang.org/infoq/a8/a86508b5bdaaf578559bd9c1f079bfe9.png)
JVM 垃圾回收性能分析
回收方法
清理
![](https://static001.geekbang.org/infoq/14/1411b7d65911ce7232b74138a6d56f47.png)
压缩
![](https://static001.geekbang.org/infoq/59/598993ce971f11fa630c52eca5217bd5.png)
复制
![](https://static001.geekbang.org/infoq/9c/9c390a98751026b009a92492ad5bf01d.png)
分代回收
![](https://static001.geekbang.org/infoq/7f/7fb9321930c8e7b90dd2417541b7398a.png)
回收算法
![](https://static001.geekbang.org/infoq/e8/e859c7005ca43d7b8109f559b82587cf.png)
启动参数
标准参数
非标准参数
非 Stable 参数
JVM 性能工具
基本工具:JPS ,JSTAT,JMAP,JSTACK
集成工具: JConsole,JVisualVM
Java 代码优化技巧及原理
主要是两方面的问题,一方面是线程安全问题和内存管理(内存泄漏和垃圾回收)问题
合理使用线程池和对象池
复用线程或对象资源,避免在程序的生命期中创建和删除大量对象
池管理算法(记录哪些对象是空闲的,哪些对象正在使用)
对象内容清除(ThreadLocal 的清空)
使用适合的 JDK 容器类
LinkList 和 ArrayList 的区别及适用场景
HashMap 的算法实现及应用场景
使用 concurrent 包,ConcurrentHashMap 和 HashMap 的线程安全特性有什么不同?
缩短对象生命周期,加速垃圾回收
减少对象驻留内存的时间
在使用时创建对象,用完释放
创建对象的步骤(静态代码段-静态成员变量-父类构造函数-子类构造函数)
使用 I/O buffer 及 NIO
延迟写与提前读策略
异步无阻塞 IO 通信
优先使用组合代替继承
减少对象耦合
避免太深的继承层次带来的对象创建性能损失
合理使用单例模式
无状态对象
线程安全
二、收获和体会
系统的学习了数据库的架构和原理,JVM 的架构和管理、垃圾回收机制,JAVA 代码优化技巧和原理
三、思考
性能优化涉及到各个方面,在使用、配置和部署系统的运行依赖环境和中间件时架构师需要充分了解运行环境的架构和原理(比如数据库的架构原理、JVM 的架构和管理才能根据应用场景进行合理的配置和优化,在遇到问题时才能根据问题的现象去快速的定位问题)
四、后续计划
不断深入的理解数据库、JVM 的原理,并且在实际的性能优化场景中根据原理判断和优化系统
评论