首页 > 编程知识 正文

jvm垃圾回收过程,jvm有哪几种垃圾收集器

时间:2023-05-05 04:16:47 阅读:16425 作者:3402

垃圾回收介绍了java垃圾回收的工作原理,程序员不需要在意内存的申请和释放。 JVM具有低优先级的垃圾回收线程。 通常不执行。 只有在虚拟机空闲或当前堆内存不足时,才会触发执行,扫描未引用的对象,将其添加到要重用的集合中进行重用。

回收判断标准判断标准的最终目的是判断对象是否还需要使用,不需要使用后回收。

一般有两种方法:

从33558www.Sina.com/gcroots开始向下搜索,搜索经过的路径称为引用链。 没有参照链连接到GC Roots的对象将被证明是可重用的。

可达性分析算法:为每个对象创建引用计数,有对象引用时计数1,释放引用时计数-1,计数器为0时可以回收。 存在无法解决循环参照问题的缺点

标记-清除算法以标记不需要的对象,然后清除并回收。

标记-清除算法(ysdzx-Sweep )是一种常见的基础垃圾收集算法,将垃圾收集分为两个阶段。

引用计数器法::标记可回收对象。标记阶段:回收标记对象占用的空间。

标记-清除算法之所以最基本,是因为下面介绍的垃圾回收算法是基于该算法进行改进的。

清除阶段:实现简单,无需移动对象。优点:标记、去除工艺效率低,产生大量不连续的内存片段,垃圾回收频率高。

标记-清除算法的执行步骤如下图所示

复制算法为了解决标记-清除算法效率低下的问题,产生了复制算法。 将内存空间划分为两个相等的区域,一次只使用一个区域。 收集垃圾时,遍历当前使用的区域,将生存对象复制到另一个区域,然后回收当前使用的区域中的可回收对象。

缺点按顺序分配内存即可,实现简单高效的操作,无需考虑内存碎片。

优点:可用内存大小将减少一半,如果对象存活率高,则会频繁复制。

复制算法的执行步骤如下图所示

标记-组织算法在新生代可以使用复制算法,但在较旧的年代不能选择复制算法。 由于上个世纪对象的存活率较高,复制操作会变多,效率也会降低。 标记-擦除算法也适用于老一代,但效率不高,在内存回收后容易产生大量内存碎片。 于是,出现了标签-清理算法(ysdzx-Compact )。 与标记-清理算法不同,标记可重用对象后,将所有生存对象压缩到内存的一端,紧凑排列,然后重用边缘边界以外的内存。 回收后,已使用和未使用的内存都在各自一侧。

解决了缺点:标记-清理算法中存在的内存碎片问题。

优点:仍然需要进行局部对象移动,在一定程度上降低了效率。

标记-整理算法的执行过程如下图所示

分代收集算法目前的商业虚拟机采用分代收集的垃圾收集算法。 正如其名称所示,分代收集算法根据对象的生存周期将内存划分为几个块。 一般来说,如图所示,包括年轻一代、老年代、永久一代。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。