JVM学习笔记

垃圾回收

g1垃圾回收器

内存结构

在这里插入图片描述
g1之前的垃圾回收器内存结构是连续的,而g1垃圾回收器是分区的,分成了一个个相等的区。
在这里插入图片描述

G1回收器的垃圾回收方式

分别为年轻代回收和混合回收
在这里插入图片描述
年轻代回收会导致整个用户线程停顿 即STW
在这里插入图片描述

回收流程

在这里插入图片描述
在这里插入图片描述
g1垃圾回收器每次回收的时候会根据回收每个区的耗时,以及最大耗时(默认200ms)来选择要回收哪些区域,回收几个区域。
每次回收的时候都会记录下来平均耗时,作为下次回收的参考依据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
混合回收中年轻代对象被复制到s区,老年代对象被复制到old区在这里插入图片描述

在这里插入图片描述
对老年代来说,g1不会回收所有老年代区域。而是会选择存活度比较低的区域进行回收。

混合回收

在这里插入图片描述
没有空的话就full gc(mix gc 和 young gc都是属于partial gc)
在这里插入图片描述

双亲委派模型

Tomcat打破双亲委派机制

在这里插入图片描述
由不同的类加载器加载,名称一样也可以正常加载。

为什么是重写 loadClass() 方法打破双亲委派模型呢? 双亲委派模型的执行流程已经解释了:

类加载器在进行类加载的时候,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成(调用父加载器loadClass()方法来加载类)。

在这里插入图片描述
流程大概是从底层一层层往上调用父类的loadclass(),如果最终启动类加载器也没法加载这个类,就会调用该子类的findclass,让他自己进行加载。所以:

如果我们不想打破双亲委派模型,就重写 ClassLoader 类中的 findClass()
方法即可,无法被父类加载器加载的类最终会通过这个方法被加载。但是,如果想打破双亲委派模型则需要重写 loadClass() 方法。

jvm内存结构

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rainist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值