jvm
2023-02-08 12:07:35 0 举报
AI智能生成
登录查看完整内容
为你推荐
查看更多
jvm的脑图, 覆盖类加载机制, 内存模型, 判断垃圾, 垃圾回收算法, 垃圾回收器
作者其他创作
大纲/内容
7.GC日志查看
2.最大的特点是让我们设置一个垃圾回收预期停顿时间
之前有一个新生代的参数 \"-XX:SurvivorRatio=8\
新生代也有Eden和Survivor的概念吗?
简单总结:
新生代
G1 有个参数\"-XX:InitiatingHeapOccupancyPercent\
什么时候触发新生代和老年代的混合回收(老年代的回收方式:混合回收)
老年代
回收触发时机-新生代
font color=\"#4669ea\
\"-XXGxMixedGCCountTarget\"
\"-XX:G1HeapWastePercent\"默认值5%
\"-XX:G1MinEDGCLiveThresholdPercent\" 默认值85%
混合回收失败的时候Full GC
垃圾回收过程
G1
Serial(串行收集器)
ParNew
Paralel Scavenge
Serial Old
Paralel Old
CMS
6.垃圾回收器
复制/清除
标记整理算法
2.动态年龄判断
\"-XX:PretenureSizeThreshold\
3.大对象直接进入老年代
4.minor gc导致进入老年代
https://www.processon.com/diagraming/63e30ad36330b9282f6f9f74
5.老年代空间担保规则
什么情况下会进入老年代(专栏17章详细说明)
分代回收
5.垃圾回收算法
1.通过类的权限定名获取类的二进制字节流
2. 将字节流所代表的静态存储结构转化为方法区的运行时数据结构
3. 内存中生成该类的java.lang.Class对象作为方法区这个类的各种数据的访问入口
1. 加载
文件格式验证
符号引用验证
验证
准备
虚拟机将常量池内符号引用替换为直接引用
解析
2. 链接
1. new该类初始化对象时候
3. 调用该类静态方法
4. 发射Class.forName的时候
6.被表明是启动类(包含main()的类)要初始化
什么时候初始化?
1. 父类的静态变量和静态块赋值(按照声明顺序)
2. 自身的静态变量和静态块赋值(按照声明顺序)
3. 父类成员变量和块赋值(按声明顺序)
4. 父类构造方法赋值
5. 自身成员变量和块赋值
6. 自身构造器赋值
初始化顺序
3. 初始化
类加载机制
拓展类加载器(Extendsion ClassLoader): 负责加载java_home/lib/ext目录或者通过java.ext.dirs系统变量指定路径的类库
Java提供的
StandardClassLoader负责加载tomcat容器相关的类
https://www.processon.com/diagraming/63e220cc56e18032d4ad22df
tomcat的classLoader
双亲委派模型
类加载器
1.class是怎么加载JVM的?? 类加载机制
1.方法区: Metaspace
2. 字节码执行引擎
3. 本地方法栈
4. 虚拟机栈
5. 程序计数器
6. 堆内存
7. 堆外内存
markword
classpoint(指向类的指针)
数组长度(对象数组会有这个)
对象头
实例数据
对齐填充字节
8. 对象组成
2.内存模型
1. 定义: 没有被引用的可当成垃圾
强引用
弱引用
软引用
虚引用
2. 引用类型
虚拟机栈(栈帧中本地变量表)引用的对象
方法区静态属性引用的对象
方法区常量引用的对象
本地方法栈JNI(一般说的native方法)的引用对象
Gc Roots有哪些?
根据可达性分析法判断对象是否可以被回收; 简单说没有被GC Roots引用的对象可以被回收
3.怎么判断是垃圾
1.对象优先分配在新生代
4.对象在内存中是如何流转的
jvm
0 条评论
回复 删除
下一页