双亲委派模型及垃圾回收

JVM双亲委派模型

当加载一个类的时候,那么这个类不会直接加载,而是将这个加载任务直接交给父类。当找不到父类的时候,才自己尝试去加载。

双亲委派模型优点:

1.唯一性(父类执行加载一次)
2.安全性(会往上找而上层的类是系统提供的类,避免加载自定义的类,从而一定程度上保证了安全性)

破坏双亲委派模型的场景:

1.JDK 1.2提出的双亲委派模型,为了兼容老代码,因此在JDK1.2的时候已经出现了破坏双亲委派模型的场景
2.双亲委派模型自身的缺点导致的,比如在父类当中要调用子类的方法是没办法实现
3.人们对于热更新的追求导致了双亲委派模型的又一次破坏

垃圾回收

1.死亡对象判断算法

引用计数器算法

给每个对象创建一个计数器,当有程序引用此类的时候,计数器+1,不使用的时候计数器-1,当计数器为0时,表示此对象没人使用,那么就可以将它归为死亡对象,等待垃圾回收器的回收。
引用计算器的缺点:
它需要单独的字段存储计算器,这样的做法增加了存储空间的开销
每次复制都需要更新计数器,伴随着加法和减法操作,增加了时间开销
引用计数器还有一个严重的问题,即无法处理循环引用的问题。这是一条致命缺陷,所以HotSpot默认的垃圾回收器使用的不是引用计数器算法。

可达性分析算法(HotSpot默认使用的算法)

此算法的核心思想为 : 通过一系列称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称之为"引用链",当一个对象到GC Roots没有任何的引用链相连时(从GC Roots到这个对象不可达)时,证明此对象是不可用的。

垃圾回收算法

标记清除算法

使用可达性分析算法先标记存活的对象和死亡对象,再进行清除
缺点:存在内存碎片

复制算法

将内存分为两块,⼀半使⽤,另⼀半在 GC 时将存活的对象放进去,然后清除。
优点:性能比较高
缺点:内存利用率低
【新⽣代使⽤的此算法】

标记整理算法

将存活的对象都向⼀端移动,然后直接清理掉边界以外的内存。(标记死亡对象,将死亡对象移动到整个数组的一边,找到存活元素的边界,清除之后的所有死亡对象)
老生代一般会使用此算法,没有内存碎片的问题

垃圾回收器

在这里插入图片描述

1.Serial

单线程串行的垃圾回收器(复制算法)
Serial收集器(新生代收集器,串行GC)
曾经(在JDK 1.3.1之前)是虚拟机新生代收集的唯一选择。是虚拟机运行在Client模式下的默认新生代收集器。

2.Serial Old

老年代串行垃圾回收器(标记整理算法)

3.parNew

新生代收集器,并发垃圾回收器
是Serial的多线程版本,采用的也是复制算法

4.Parallel Old收集器

老年代收集器,并行GC
并发垃圾处理器,以吞吐量作为主要依据进行垃圾回收。适用于后端系统
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。

5.CMS

老年代收集器,标记清除算法
更少的STW,适用于用户交互系统
1.初始标记(STW)
2.并发标记
3.重新标记(STW)
4.清除

6.Parallel Scavenge 并行GC收集器

Parallel Scavenge收集器是⼀个新生代收集器,它也是使用复制算法的收集器,又是并行的多线程收集器。

7.G1:JDK11默认的垃圾回收器

G1(Garbage First)垃圾回收器是⽤在heap memory很⼤的情况下,把heap划分为很多很 多的region块,然后并⾏的对其进⾏垃圾回收。
STW时间更短。JDK11默认的垃圾回收器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值