课程简介:
- 本课程涉及JVM性能优化的各个方面
- 重点阐述JVM相关知识、性能调优实践、相关工具的原理和使用
- 理解通过Java程序设计提升软件性能
课程收益:
- 了解JVM核心原理,充分利用现代硬件和操作系统,衡量Java性能
- 帮助团队中各种角色的技术人员了解Java性能分析和调优方法
- 编写并部署更高效率的Java应用程序
时间1~2天。
性能调优初步
- 系统资源限制
- CPU history
- 硬件规格
- Latency Table延时表
- 延时时间
- 磁盘规格
- 调优分析层面
- 优化方法
- 性能视角
- 吞吐量指标
- 性能需求
- 调优时机
- “不要过早优化”?
- 统计方法测量性能
- 性能分析模式
基本工具一览
- Linux工具
- vmstat example
- vmstat参数说明
- iostat范例
- iostat参数说明
- netstat example
- Linux Stack性能测试工具
- JDK命令行工具
- JDK GUI工具
- OQL对象查询
- JMeter
JVM 调优
- 性能相关概览
- 系统性能需求考虑
- 应用系统需求
- 重要性能相关数据(一)
- 重要性能相关数据(二)
- 虚拟机参数使用
- 参数选项的作用
- 启动过程
- 内存监控
- 类的数量
- 堆直方图示例
- 堆转储
- 内存溢出错误
- 监控内存情况
- NMT example
垃圾收集
- 主流垃圾收集器
- 垃圾收集步骤
- 垃圾收集分代
- 垃圾收集设计
- 垃圾收集图示(新生代)
- 垃圾收集图示(老生代)
- 选择垃圾收集算法
- 调优原则
- Stop the World
- Safepoint安全点
- 垃圾回收日志示例
- CMS GC
- G1 GC
- 调优方法
- 新生代优化
- 永久代和元空间
- GC log日志记录
- GC jstat实例
类加载
- 类加载过程(一)
- 类加载过程(二)
- 类载入速度
- 类数据共享
JIT编译优化
- 分层编译级别
- 热点编译
- 代码缓存
- 代码编译
- 打印编译过程
- 内联优化
- 线程监控
- 磁盘IO
- NIO and libs
- 提升性能
- 原生NIO缓存区
- NIO Path文件系统
- CPU记录和调度
- 处理器利用率指标
应用服务器调优
- 线程池
- Executors工厂类
- 线程池工作方式
- 线程数设定
- EE Concurrency
- 数据库连接池
- JDBC驱动
- 数据库连接池
- 配置数据库连接池
- JPA performance
- JPA缓存
- 组件池
- 减少内存占用
- 对象池构造
- 对象池表现
- 线程局部变量
- 引用类型
- EJB对象池
- EJB pools config
- Web容器
- 优化Web Container
- 容器缓冲区
- 监听器
- servlet container config
- 状态缓存池
- 分布式缓存
- 消息部分
- JMS优化
- Artemis log 文件
- 消息集群高可用
- 消息调优
- Kafka优化
- 容量估算
- 负载均衡
- 反向代理多个节点
- mod_cluster
- 日志记录和优化
- 高效记录日志
- 日志文件
Java应用系统调优
- JMX获取性能数据
- MBeanServer获取信息
- JMX Architect
- JMX example
- trace埋点和监控
- Wildfly metrics
- Matrics example
- 编写高效应用若干原则
- 设计模式优化
- 优化组件方法
- 高效文本解析
- 远程网络访问
- 应用性能优化
- 集群方案
- 数据分区
- 选用合适的并发方式
- 线程同步
- 集合优化
- 代码异步化考虑
- 高效使用集合
- 并发控制方法
- 并发包同步工具
- 合理使用流Stream
- RxJava使用
- JavaEE 异步化
- 编程目标优化(一)
- 编程目标优化(二)
高级工具
- JVMTI接口
- 开发Agent
- 范例
- MethodTraceAgent.cpp
- MethodTraceAgent.h
- 编译运行
- 运行
- JFR和JMC
- 使用JFR
- JFR Events
- 事件种类
- JFR template模板
- JMC GUI (一)
- 应用程序部分(二)
- 应用程序视图
- JMC JVM部分
- 内存视图
- 线程视图
- 触发器
- JFR event事件概览
- JitWatch
- JitWatch Sample
- Byteman
- 范例
- appmain.btm