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