课程大纲
第一天上午:JVM 原理
第一部分 Java 类加载和内存管理
Java Class:讲解 Java Class 解析、校验以及加载的过程
Class 与 ClassLoader 之间的关系:通过源码级别理解 Class 与 ClassLoader 之间的关系
ClassLoader 双亲委派原理:通过底层实现理解双亲委派的设计和局限性
Java 类存储:Java 类对象存储细节
Java 内存区域:介绍 Java 内存区域的组成,深入讨论 Java Heap、方法区、JVM Stack 等职责范围以及设计目的
第二部分 Java 垃圾回收器调优
Serial 收集器特征和调优
Parallel 收集器特征和调优
CMS 收集器特征和调优
G1 收集器特征和调优
第一天下午:Java Trouble-Shooting
第一部分 Java 故障案例分析
CPU 过高案例:介绍高消耗CPU代码的常用分析方法,逐一排查可能性
GC 案例:介绍 Young GC 和 Full GC 的基本表象,以及如何在代码实现中尽可能地避免 Full GC
主要内容
OOM 错误案例:分析 Java 内存泄露的症状,以及快速定位泄露位置(堆、Perm 或 Metasapce)以及解决方案
诊断 JVM Crash :介绍 Java 内存泄露引起的 JVM 进程 Crash 的现象和排查手段
诊断 Java 代码:讨论由 Java 代码引起的 Java 内存泄漏的特征以及如何借助诊断工具定位问题代码
诊断 Native 代码:讨论由 Java Native 代码引起的 Java 内存泄漏的特征以及如何借助诊断工具定位问题代码
第二部分 Java 运维工具
工具介绍:Java 进程工具(jps)、线程 dump 工具(jstack)、内存 dump 工具(jmap)、Java 调试工具(jdb)、图形化工具(jmc、jvisualvm、jconsole)
工具与JMX:理解 JMX 运维 JVM 的适用范围,以及它与运维工具之间的关系
Java Tools API:介绍 Java 编译器、Java Attatch API、Java Dump API 以及对象查询语言(OQL)
第二天上午:应用优化
第一部分 关系型数据库优化
数据库优化:慢 SQL 查询和分析,索引优化、数据垂直拆分、水平拆分
JDBC 事务:JDBC 事务原理以及 EJB 和 Spring 事务实现
JDBC 优化:数据库连接池选型,PreparedStatement 性能优化以及 MyBatis 和 JPA 最佳实践
第二部分 分布式优化
缓存优化:解决缓存并发、缓存穿透以及缓存雪崩问题
分布式锁:理解和实现分布式锁(基于 Zookeeper 和 Redis)
分布式事务:理解分布式事务原理,合理地选型实现
第二天下午:分布式优化
第一部分 Web 优化
异步 Web:异步 Servlet 提升系统吞吐量
分布式 Session:实现分布式 Session 实现单点登录
第二部分 其他优化
异步优化:使用并发框架实现异步特性
日志优化:比较 Java Logging、logback、Log4j 1 和 2 的特点和优势,合理地使用日志
I/O 优化:文件锁、修改通知,零拷贝等优化手段
网络优化:合理地设置 Socket 连接数量、TCP 网络参数优化
内存优化:理解 OS OOM 原理,堆外内存、虚拟内存等合理使用