欢迎光临回收数控机床随叫随到,正规渠道,欢迎咨询!

高价回收数控机床,拥有多年经验,经济实力强!

回收数控机床

垃圾收集算法、回收机制和总结--JVM

作者:以沫      发布时间:2021-04-14      浏览量:0
垃圾收集算法、收集机制和JVM1、垃圾收

垃圾收集算法、收集机制和JVM


1、垃圾收集算法

1.标记清除

标记--清理算法将垃圾收集分为两个阶段:标记阶段和清理阶段。

在标记阶段,所有以根节点开始的对象都首先使用根节点(GCRoot)标记,而未标记的对象是一个未引用的垃圾对象。然后,在清理阶段,清除所有未标记的对象。下图

[图片上传失败.

适用场景:

缺点:

2。复制算法

从根集合节点扫描,标记所有幸存的对象,将幸存的对象复制到新的内存块(图底部的内存),然后从

[未能上传图片。(Imag-9bc14e-1618061506011)]

许多商业虚拟机使用此收集算法来恢复新一代。

适用情况:

缺点:

。标签排序的效率

复制算法是建立在存在对象较少、垃圾对象较多的前提下的。

这种情况在新一代中经常发生,但在老年时,大多数对象都是活的对象,这是比较常见的。如果仍然使用复制算法,复制成本也会很高,因为有更多的活动对象。

[图片上传失败.(Image-ee4c8c-1618061506011)

标签压缩算法是一种旧的恢复算法,它在标签清除算法的基础上进行了一些优化。

首先,您还需要将所有可访问对象从根节点标记一次,但在此之后,它不会简单地清理未标记的对象,而是将所有活动对象压缩到内存的一端。该方法不仅避免了碎片的产生,而且不需要两块相同的内存空间,具有很高的性价比。

4.生成收集算法

是目前虚拟机使用的恢复算法,它解决了标签排序不适合老年人的问题,并将内存划分为各个年龄段。一般来说,堆区分为老年(终身世代)和新一代(年轻一代),除了堆区外,还有一个世代是永久世代(永久世代)。

在不同年龄使用不同的算法,因此采用最合适的算法,新一代成活率低,可以使用复制算法。另一方面,旧对象的存活率没有额外的空间来为其分配保证,因此只能使用标记删除或标记排序算法。

2,垃圾收集机制

JVM内存结构

1)新生成的对象在Eden区域被指定优先级(除非配置为-XX:PretenureSizeThresHolding,大于此值的对象直接进入老一代);

2)当Eden区域满或没有时,幸存的对象被复制到从区域。

在这里,需要注意的是,如果所有幸存的对象都不能放置在FROM区域,那么所有这些幸存的对象都将进入老年。之后,伊甸园地区的所有记忆都被恢复。在

3之后生成的对象继续在Eden区域中分配,当Eden区域是否满时,Eden中和区域中幸存的对象将被复制到to区域(类似地,如果无法将幸存的对象放置到区域,则所有幸存的对象都将进入老年),然后Eden中的所有内存和区域中的所有内存都将被恢复。

4)如上所述,许多对象将被多次复制(每个副本为+1),默认情况下,当对象被复制15次(这个数字可以由:-XX:MaxTenuringThresHolding配置)时,它将进入旧代。

5)当旧代已满或无法存储即将进入旧代的对象时,Full GC(只发生一次,这是我们需要减少的最重要的事情,因为这需要大量时间)。

垃圾收集有两种类型:小GC和完整GC。

1.微型GC

回收新一代不会影响新一代。由于大多数新一代Java对象死掉频繁,所以较小的GC非常频繁,这里一般采用快速高效的算法,这样垃圾收集就可以尽快完成。

2.Full GC

也称为“主GC”,用于回收整个堆,包括新一代和老一代。由于全GC需要回收整个堆,所以它比小GC慢,因此应尽量减少满员GC的数量,从而导致填充满GC,填充永久GC(Perm)和显式调用System.gc()等等。

2.垃圾收集算法的总结

1.年轻一代:复制算法

2.老一代:标记-清除或标记-排序

这一代和老一代分别使用不同的恢复算法,分别称为“生成收集算法”,这也是企业目前使用的

3的一种方式)每个算法都有许多不同的垃圾收集器,在实际使用中,根据自己的业务特点作出选择。

在线客服 在线客服 QQ咨询
返回顶部 返回顶部 返回顶部