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