JVM知识地图
2021-03-11 21:51:25 12 举报
AI智能生成
JVM知识地图
作者其他创作
大纲/内容
JVM
调优
性能指标
吞吐量
停顿时间
垃圾回收频率
工具
命令
jps
jmap
查看内存信息,实例个数以及占用内存大小
jmap -histo pid
jmap -heap pid
jstack
jinfo
jstat
jstat -gc pid
jstat -options
arthas
gcviewer
MAT
gceasy
https://gceasy.io
参数
-XX:Xms
-XX:Xmx
-XX:Xmn
-XX:Xss
-XX:MaxMetaspaceSize
-XX:MaxMetaspaceSizeMetaspaceSize
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath
方法
查看&分析 GC日志
-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息-Xloggc:../logs/gc.log 日志文件的输出路径
1. 降低 Minor GC 频率
2. 降低 Full GC 的频率
减少创建大对象
增大堆内存空间
选择合适的 GC 回收器
JVM 内存分配的调优
AB压测
分析GC日志
实践
内存持续上升,如何排查问题?
top
top -Hp pid
vmstat
内存
pidstat
线程
pidstat -p pid -r
cpu使用率过高和jvm old占用过高排查过程
cpu占用过高排查思路
top 查看占用cpu的进程 pidtop -Hp pid 查看进程中占用cpu过高的线程id tidprintf '%x/n' tid 转化为十六进制jstack pid |grep tid的十六进制 -A 30 查看堆栈信息定位
jvm old区占用过高排查思路
GC
可回收对象判断
引用计数
可达性分析
对象引用类型
强引用
软引用
弱引用
虚引用
GC算法
分代收集理论
标记-清除
复制
标记-整理
底层算法
三色标记
黑色
灰色
白色
读屏障
写屏障
SATB
Snapshot At The Beginning
增量更新
垃圾回收器
年轻代
Serial
Parallel
ParNew
Epsilon
老年代
Serial Old
Parallel Old
CMS
G1
Region
最大2048
Humongous
特点
并行与并发
分代算法
空间整合
可预测的停顿
YoungGC
MixedGC
FullGC
ZGC
Shennandoah
选择
1. 优先调整堆的大小让服务器自己来选择2. 如果内存小于100M,使用串行收集器3. 如果是单核,并且没有停顿时间的要求,串行或JVM自己选择4. 如果允许停顿时间超过1秒,选择并行或者JVM自己选5. 如果响应时间最重要,并且不能超过1秒,使用并发收集器6. 4G以下可以用parallel,4-8G可以用ParNew+CMS,8G以上可以用G1,几百G以上用ZGC
内存分配
对象创建过程
类加载检查
分配内存
指针碰撞
空闲列表
并发
CAS
TLAB
本地线程分配缓冲
初始化
初始化为零值
设置对象头
执行<init>方法
属性赋值
构造方法
指针压缩
分配过程
栈上分配
逃逸分析
标量替换
堆上分配
Eden区
长期存活进入老年代
对象动态年龄判断
S0<->S1
大对象进入老年代
PretenureSizeThreshold
老年代空间分配担保机制
-HandlePromotionFailure
堆外内存分配
DirectByteBuffer
使用ByteBuffer.allocateDirect()
内存结构
堆
Young 1/3
Eden 8/10
Survivor
From 1/10
To 1/10
Old 2/3
栈
虚拟机栈
栈帧
局部变量表
操作数栈
动态链接
方法出口
main() 栈帧
本地方法栈
程序计数器
方法区/元空间
常量池
堆外内存
字节码执行引擎
类加载
过程
加载
连接
验证
准备
静态变量
默认值
解析
静态链接
符号引用->直接引用
初始化 <cinit>
静态变量初始化
静态代码块
使用
卸载
类加载器
bootstrap
ext
app
custom
双亲委派
先找父亲加载,不行再由儿子自己加载
原因
沙箱安全
避免重复加载
打破双亲委派
自定义
Tomcat
字节码
魔数
版本号
字段表集合
方法表集合
编译
JIT
HotSpot
C1
client
C2
server
热点探测
方法调用计数器
回边计数器
编译优化
方法内联
锁消除
Graal
java10
静态编译
javac
*.class
编译原理
词法分析
语法分析
AST: 抽象语法树
语义分析
代码生成
+: 代数->组合数学、离散数学、图论->形式语言与自动机
产品
收藏
收藏
0 条评论
下一页