jvm 知识图谱
2021-02-21 22:07:39 34 举报
AI智能生成
jvm 知识图谱
作者其他创作
大纲/内容
参数配置
子主题
-server
G1垃圾回收器
-XX:+UseG1GC
-XX:MaxGCPauseMillis
-XX:G1HeapRegionSize
-XX:MaxTenuringThreshold=n
-XX:InitiatingHeapOccupancyPercent
-XX:G1NewSizePercent
-XX:G1MaxNewSizePercent
-XX:ConcGCThreads
-XX:-XX:G1HeapWastePercent
-XX:G1MixedGCCountTarget
CMS垃圾回收器
-Xms2g
-Xmx2g
-Xmn256m
-Xss256k
-XX:+UseParNewGC
-XX:+UseCMSCompactAtFullCollection
-XX:CMSInitiatingOccupancyFraction=70
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CMSFullGCsBeforeCompaction=3
GC范围
Young GC
只对年轻代进行回收
OLD GC
只对老年代进行回收, 比如CMS
Mixed GC
收集整个新生代和部分老年代, 比如: G1
Full GC
收集整个堆内存
触发条件
老年代没有足够连续内存存放大对象
从survicor晋升到老年代的平均大小 大于 老年代剩余大小时
调用System.gc() . 不一定会执行
Metaspace区内存达到阈值
JVM故障排查
CPU使用率高分析
top 命令查看cpu占比高的进程
top命令查看cpu占比高的线程
jstack dump出线程栈, 查看线程执行的代码
线程数过多分析
线程数过多, 导致栈内存溢出
内存溢出分析
使用visual VM实时分析或者dump出来
可达性分析
引用计数法
可达性分析算法
root对象
G1 回收器
G1之前的垃圾回收器STW时间会随着堆内存增加线性增加
分区
Eden
Survivor
Old
Humongous
加入了Region的概念, 把堆内存分成一个个固定大小的region,
可以设置一个垃圾回收时间, G1会预估在这个时间段内可以回收的region.
尽力在设定时间内完成回收
可以设置一个垃圾回收时间, G1会预估在这个时间段内可以回收的region.
尽力在设定时间内完成回收
young GC
Eden分区满了后触发
partially young GC
老年代占比超过设定值后就触发
JVM指令
iload
iadd
ipush
astore / istaore
ireturn
getfield/ putfield
invokevirtual / invokestatic
getstatic / putstatic
new / newarray
monitorenter / moniterexit
i++
1: 把i的值从主存写入工作内存,;
2: 执行iadd 指令
3: 将i的值写入主存
2: 执行iadd 指令
3: 将i的值写入主存
中的来说分为三步,
但是jvm使用了更多指令来完成上面的每个步骤
但是jvm使用了更多指令来完成上面的每个步骤
内存DUMP
线程栈分析工具jvisualvm[jvm自带]
jstack 进程号 > ziwei_01271604.tdump
jstack 进程号 > ziwei_01271604.tdump
内存分析工具:jvisualvm[jvm自带]
jmap.exe -dump:format=b,file=eclipse_01271512.dump 进程号
jmap.exe -dump:format=b,file=eclipse_01271512.dump 进程号
子主题
类文件
类加载
类文件
内存分布
栈内存
由栈帧组成
栈帧
局部变量表
操作数栈
返回地址
堆内存
Metaspace
原来的方法区, 存储类文件,常量等元数据
jdk8直接使用本地内存, 不适用jvm内存
jdk8直接使用本地内存, 不适用jvm内存
垃圾回收算法
标记清除
会产生内存碎片
CMS垃圾回收器
标记整理
Parallel Old 回收器
需要局部移动对象, 效率较低
复制算法
Serial / ParNew 回收器
Parallel Scavege回收器
浪费内存
分代算法
新生代
默认大小占 1/3
默认大小占 1/3
Eden
默认占: 8/10
默认占: 8/10
survivor
默认占: 1/10
默认占: 1/10
survivor
默认占: 1/10
默认占: 1/10
老年代: 默认占 2/3大小
永久代:
在JDK1.8 已经移除, 该部分内存直接使用本地内存, 不在使用堆内存
垃圾回收器
G1回收器
JDK9后的默认回收器
JDK7支持G1
JDK7支持G1
CMS回收器
老年代回收器, GC时间短
只能配合ParNew 回收期使用
只能配合ParNew 回收期使用
默认每隔两秒判断一次是否需要执行GC
触发条件: 老年代达到92% ; 新生代晋升担保失败
触发条件: 老年代达到92% ; 新生代晋升担保失败
长时间允许会导致严重的内存碎片;
可以设置N次gc后进行一次压缩
可以设置N次gc后进行一次压缩
通过预处理阶段进行并发清除, 减少STW
清理过程
初始化标记阶段, STW
并发标记阶段
预清理阶段
并发重新标记, STW
Serial 回收器
新生代回收器
复制算法
ParNew回收器
Serial多线程版本
在单核或者双核情况下效果比Serial小
在单核或者双核情况下效果比Serial小
复制算法
Parallel Scavenge
新生代回收器
复制算法
注重的是高吞吐量而不是停顿时间
Parallel Old
老年代回收器, 配合Parallel scavenge使用
标记整理算法
内存监控工具
Visual VM
实时监控堆
实时监控线程, 栈
dump 线程, dump 堆
分析 内存快照
GCEasy
在线分析GC日志
0 条评论
下一页