JVM
2021-12-14 10:06:42 19 举报
AI智能生成
JVM
作者其他创作
大纲/内容
前奏篇
源码到类文件
编译
编译过程
类文件结构
类加载机制
装载
链接
验证
准备
解析
初始化
类加载器
分类
Bootstrap ClassLoader<br>
Extention ClassLoader
App ClassLoader
Custom ClassLoader<br>
加载原则
双亲委派机制
运行时数据区
Method Area (方法区)
Heap(堆)
Java Virtual Machine Stack(java虚拟机栈)<br>
The PC Register(程序计数器)
Native Method Stacks(本地方法栈)
进行篇
栈帧
局部变量表
操作数栈
动态链接
方法返回地址
各数据区联系
栈指向堆
方法区指向堆<br>
堆指向方法区
java对象的内存布局
对象头
Mark World(锁,hash码,GC年龄)(8字节)<br>
Class Pointer(指向方法区中类元信息)(8字节)<br>
length(数组独有)(4字节)<br>
实例数据
对象各个成员变量
对齐填充
保证对象大小为8字节整数倍 无实际意义<br>
内存模型
非堆
MetaSpace
堆
Young区
Eden区 比例:8
Survivor区<br>
S0 比例:1
S1 比例:1
Old区
升华篇
如何判定一个对象是垃圾对象<br>
引用计数算法<br>
弊端:无法回收循环引用的对象
可达性分析
能作为GC Root的对象:类加载器,Thread,虚拟机栈的本地变量表,static成员,常量池引用,本地方法栈变量
如何进行垃圾回收
GC算法
标记-清除算法
复制算法
标记-整理算法
垃圾回收器
Serial(复制算法)<br>
ParNew(复制算法)
Parallel Scavenge(复制算法)<br>
Serial Old(标记-整理算法)
Parallel Old(标记-整理算法)
CMS(标记-清除算法)
G1(标记-整理算法)
何时进行垃圾回收
当Eden区或者S区不够用了
老年代空间不够用了
方法区空间不够用了
System.gc()
实战篇
JVM参数
标准参数
-X参数
-XX参数
其他参数
如何查看
-XX:+PrintFlagsFinal
如何设置
idea、Eclipse中设置
java -jar -XX:+UseG1GC xxx.jar
tomcat中用脚本设置
jinfo -flag 实时修改<br>
常用命令
jps
jinfo
jstat
jstack
jmap
常用工具
jconsole
jvisualvm<br>
Arthas
MAT
GCViewer
终结篇
生成GC日志文件
使用工具分析GC日志
GCeasy
GCViewer
G1调优指南
调优
(1)使用G1GC垃圾收集器: -XX:+UseG1GC
(2)调整内存大小再获取gc日志分析
(3)调整最大停顿时间
(4)启动并发GC时堆内存占用百分比
最佳指南(官网)
(1)不要手动设置新生代和老年代的大小,只要设置整个堆的大小
(2)不断调优暂停时间目标
(3)使用-XX:ConcGCThreads=n来增加标记线程的数量
(4)MixedGC调优
(5)适当增加堆内存大小
JVM性能优化指南
常见面试题总结
0 条评论
下一页