JVM调优
2021-09-23 19:26:05 97 举报
AI智能生成
JVM调优脑图
作者其他创作
大纲/内容
JVM类加载机制
类加载的过程
加载
验证
准备
解析
初始化
使用
卸载
双亲委派模型
定义
类加载器
引导类加载器:BootStrapClassLoader
扩展类加载器:ExtClassLoader
应用程序加载器:AppClassLoader
自定义类加载器:MyClassLoader
实现原理
如此设计的好处
沙箱安全机制
避免类重复加载
打破双亲委派模型
自定义类加载器重写loadClass与findClass方法
Java的SPI机制
JVM内存结构
JVM是什么?
JVM、JRE、JDK
JVM 参数设置
Tomcat
Spring Boot
JVM内存结构模型图
程序计数器
实现
作用
特点
本地方法栈
作用
特点
一些本地方法
虚拟机栈
什么是栈?
定义
组成
多个栈帧
栈帧
定义
什么是活动栈帧?
出入栈规则
存储的内容
局部变量表
操作数栈
动态链接
方法出口信息
特点
为什么有多个栈帧?
几个问题
是否涉及垃圾回收?
是否存在线程安全问题
栈内存溢出原因
方法区
定义
特点
永久代(JDK < 1.8)
元空间(JDK >= 1.8)
常量池
Class常量池
常量池
字面量
符号引用
运行时常量池
字符串常量池(串池)
JDK 1.6在永久代 JDK 1.8在元空间
串池机制,可避免重复创建对象
字符串拼接原理
三种字符串操作
调优
类似HashTable,是hash表,性能与buckets桶个数密切相关,桶越多元素越分散,链表越短,哈希碰撞越少,查找速度越快
Java运行时类名,方法名,常量等也是以字符串形式存储在串池中
调优
调整HashTable桶个数
如果程序中含有大量字符串,使用intern()进行字符串入池 ,减少字符串个数,节约堆内存的使用
扩展延伸
八种包装类型的包装类和对象池
堆
new 关键创建的对象
垃圾回收
线程共享,考虑安全问题
对象的创建与内存分配
对象创建的流程
1.类加载检查
2.内存分配
分类
指针碰撞
空闲列表
并发问题
CAS
TLAB
3.初始化
4.设置对象头
对象在存储中的布局
对象头
什么是java对象的指针压缩?
为什么要进行指针压缩?
对齐填充
实例数据
5.执行init方法
对象内存分配
对象在栈上的分配
标量与聚合量
标量替换
对象在新生代的分配
大对象的分配
长期存活的对象将进入老年代
对象动态年龄判断
老年代空间分配担保机制
垃圾回收机制
如何判断一个对象可以被回收?
1.引用计数法
2.可达性分析
四种引用
强引用
软引用
弱引用
虚引用
补充:终结器引用
垃圾回收算法
标记清除法(Mark-Sweep)
回收方式
特点
复制算法(Copying)
回收方式
特点
标记整理算法(Mark-Compact)
回收方式
特点
分代收集理论
核心思想
收集步骤
算法选择
新生代
伊甸园Eden
幸存区Survivor
S1(From)
S2(To)
老年代
垃圾回收器
Serial收集器 (串行)
基本参数
特点
应用场景
回收过程
Parallel 收集器(吞吐量优先)
基本参数
特点
应用场景
回收过程
ParNew收集器(吞吐量优先)
基本参数
特点
回收过程
应用场景
CMS收集器(响应时间优先)
基本参数
特点
回收过程
三色标记
垃圾回收器中的应用
黑色
灰色
白色
多标-浮动垃圾
漏标-读写屏障
G1 收集器(同时注重响应时间与吞吐量)
基本参数
回收过程
应用场景
垃圾收集分类
YoungGC
MixedGC
Full GC
ZGC收集器收集器
主要目标
布局
Region设计
记忆集与卡表
如何选择垃圾收集器
安全点与安全区域
安全点
安全区域
JVM调优工具及调优方法
调优工具
jps
jmap
查看内存信息,实例个数以及占用内存大小
查看堆内存占用情况
堆dump
jstack
查找死锁
找出占用cpu高的线程堆栈信息
jinfo
查看正在运行的Java应用程序的扩展参数
查看系统属性
jstat
查看堆内存各部分的使用量,以及加载类的数量
垃圾回收整体统计
堆内存统计
新生代垃圾回收统计
新生代内存统计
老年代垃圾回收统计
老年代内存统计
元空间统计
垃圾回收信息统计(比例)
JVM 最近编译情况
应用场景:JVM运行情况分析
年轻代对象增长的速率
Young GC 的触发频率和每次耗时
每次 Young GC 后有多少对象存活和进入老年代
Full GC的触发频率和每次耗时
优化思路
调优思路分析
思路
常见问题
Full GC 和 Young GC频繁
Full GC 频繁,甚至多于 Young GC
请求高峰期发生Full GC,单次暂停时间特别长
老年代充裕的情况下,发生Full GC(CMS JDK1.7)
内存泄漏与内存溢出
内存泄漏
内存溢出
GC日志
阿里巴巴Arthas
0 条评论
下一页