JVM
2021-12-14 10:06:42 19 举报
AI智能生成
JVM
作者其他创作
大纲/内容
前奏篇
源码到类文件
编译
编译过程
类文件结构
类加载机制
装载
链接
验证
准备
解析
初始化
类加载器
分类
Bootstrap ClassLoader
Extention ClassLoader
App ClassLoader
Custom ClassLoader
加载原则
双亲委派机制
运行时数据区
Method Area (方法区)
Heap(堆)
Java Virtual Machine Stack(java虚拟机栈)
The PC Register(程序计数器)
Native Method Stacks(本地方法栈)
进行篇
栈帧
局部变量表
操作数栈
动态链接
方法返回地址
各数据区联系
栈指向堆
方法区指向堆
堆指向方法区
java对象的内存布局
对象头
Mark World(锁,hash码,GC年龄)(8字节)
Class Pointer(指向方法区中类元信息)(8字节)
length(数组独有)(4字节)
实例数据
对象各个成员变量
对齐填充
保证对象大小为8字节整数倍 无实际意义
内存模型
非堆
MetaSpace
堆
Young区
Eden区 比例:8
Survivor区
S0 比例:1
S1 比例:1
Old区
升华篇
如何判定一个对象是垃圾对象
引用计数算法
弊端:无法回收循环引用的对象
可达性分析
能作为GC Root的对象:类加载器,Thread,虚拟机栈的本地变量表,static成员,常量池引用,本地方法栈变量
如何进行垃圾回收
GC算法
标记-清除算法
复制算法
标记-整理算法
垃圾回收器
Serial(复制算法)
ParNew(复制算法)
Parallel Scavenge(复制算法)
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 实时修改
常用命令
jps
jinfo
jstat
jstack
jmap
常用工具
jconsole
jvisualvm
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 条评论
下一页