JVM与性能调优
2021-06-24 10:24:14 2 举报
AI智能生成
JVM知识汇总,帮助大家更好的复习
作者其他创作
大纲/内容
JVM内存模型
整体结构
组成
线程栈
栈帧
局部变量表
操作数栈
动态连接
方法出口
机制
对象逃逸分析
标量替换
对象栈上分配
本地方法栈
方法区(元空间)
常量
类元信息
常量池
堆
组成
新生代1/3(年轻代)
eden
survior0
survior1
永久代2/3(方法区)
变量
静态变量
字符串常量池
程序计数器
内存分配机制
对象的创建流程
流程图
1.类加载检查
2.分配内存
划分内存的方法
“指针碰撞”(Bump the Pointer)(默认用指针碰撞)
“空闲列表”(Free List)
解决并发问题的方法
CAS(compare and swap)
本地线程分配缓冲(Thread Local Allocation Buffer,TLAB)
3.初始化零值
4.设置对象头
组成
对象头(Header)
mark work
32位对象头
64位对象头
Klass Point
实例数据(Instance Data)
boolean:1byte
byte:1byte
short:2byte
char:2byte
int:4byte
float:4byte
long:8byte
double:8byte
String:8byte 指针压缩后4byte
Object:8byte 指针压缩后4byte
对齐填充(Padding)
指针压缩
为什么需要指针压缩?
jdk1.6后添加指针压缩,默认开启
5.执行方法
对象内存分配
对象内存分配流程图
对象内存分配
对象栈上分配
对象逃逸分析
标量替换
标量与聚合量
对象移动
大对象直接进入老年代
长期存活的对象将进入老年代
对象动态年龄判断
老年代空间分配担保机制
类加载机制
类加载过程
加载
验证
准备
解析
初始化
使用
卸载
类加载器
引导类加载器(BootstrapLoader )
扩展类加载器(ExtClassloader)
应用程序类加载器(AppClassLoader)
自定义加载器
使用场景
打破双亲委派机制
自定义类加载器加载String
双亲委派机制
流程
作用
沙箱安全机制
避免类的重复加载
全盘负责委托机制
tomcat打破双亲委派机制
结构
类加载器
CommonClassLoader
CatalinaClassLoader
SharedClassLoader
WebappClassLoader
JasperLoader
垃圾回收器与算法
垃圾回收机制
标记算法
引用计数法
可达性分析算法
finalization方法
清除算法
标记清除算法
复制算法
标记整理算法
其他概念
分代收集算法
增量收集算法
分区收集算法
StopTheWorld
常见的引用类型
强引用
软引用
弱引用
虚引用
垃圾回收器
ZGC收集器
Serial收集器
新生代:复制算法
老年代:标记整理
Serial Old收集器
Parallel Scavenge收集器
新生代:复制算法
老年代:标记整理
Parallel Old收集器
CMS收集器
标记-清除过程
初始标记
并发标记
重新标记
并发清理
并发重置
G1收集器
结构
特点
可以预期STW的停止时间
垃圾回收过程
初始标记(initial mark,STW)
并发标记(Concurrent Marking)
最终标记(Remark,STW)
筛选回收(Cleanup,STW)
回收区块选择
优先列表
ZGC收集器
结构
Region分类
小型Region(Small Region)
中型Region(Medium Region)
大型Region(Large Region)
运作过程
并发标记(Concurrent Mark)
并发预备重分配(Concurrent Prepare for Relocate)
并发重分配(Concurrent Relocate)
并发重映射(Concurrent Remap)
垃圾回收底层算法及机制
三色标记
解决多标漏标的三种颜色
黑色
灰色
白色
多标-漏标
多标-浮动垃圾
漏标-读写屏障
写屏障
读屏障
原始快照(Snapshot At The Beginning,SATB)
写屏障实现SATB
增量更新(Incremental Update)
写屏障实现增量更新
记忆集与卡表
卡表
JVM性能调优
命令
Jps
Jmap
堆信息:jmap -head
堆内存dump:jmap -dump:format=b,file=eureka.hprof
Jstack
查死锁
Jinfo
查看正在运行的Java应用程序的扩展参数
Jstat
垃圾回收统计:jstat -gc pid
堆内存统计:jstat -gccapacity pid
新生代垃圾回收统计:jstat -gcnew pid
新生代内存统计:jstat -gcnewcapacity pid
老年代垃圾回收统计:jstat -gcold pid
老年代内存统计:jstat -gcoldcapacity pid
元数据空间统计 -gcmetacapacity pid
各区域内存使用比例:jstat -gcutil pid
Arthas
使用
命令
dashboard:查看整个进程的运行情况
thread:查看线程详细情况
thread -b 查看死锁线程
jad加类的全名:反编译类
0 条评论
下一页