当前位置: 首页 > 网络应用技术

Java中常见的JVM垃圾收集算法

时间:2023-03-06 18:20:49 网络应用技术

  Java的垃圾收集算法没有使用参考计数方法来确定垃圾。取而代之的是,它基于垃圾分析算法的能力,该算法产生了几种常见的垃圾收集算法。基本上,主要有标记清晰的算法,复制算法,标记收集算法等。此外,还有一些算法也是如此。全面,分为全面的算法。

  标记清晰的算法是最基本的集合算法,也是现代垃圾回收算法的意识形态基础。它分为两个阶段:标记阶段和去除阶段。在标记阶段,首先通过根节点,可可射击目标开始从根节点中,未覆盖的对象是未引用的垃圾对象。然后,在清除阶段,删除所有未拨动的对象。

  优势:

  缺点:

  复制算法的核心是将原始内存空间分为两个。它们中只有一个用于每个人。当回收垃圾时,使用的对象被复制到另一个内存空间,并且内存空间为空。交换两个内存的字符并完成垃圾的回收。

  如果内存中有许多垃圾对象,则需要复制的对象较少。在这种情况下,它适用于使用此方法和高效率,否则,它不合适。

  优势:

  缺点:

  当前的商业虚拟机使用此集合算法来回收新一代。IBM的特别研究表明,新一代中有98%的物体“死于生命和死亡”,因此不必根据1:1的比率分割以划分记忆空间的1:1 Instead的比率,每次使用伊甸园和一个幸存者时,记忆被分为较大的伊甸园和两个较小的幸存者空间。

  回收时,在伊甸园和幸存者中生存的物体一次被复制到另一个幸存者空间,最后清洁了伊甸园和幸存者空间。热点虚拟机默认伊甸园和幸存者的尺寸比为8:1:1:1:1:1:1:1:1也就是说,整个新一代中有90%(80%+10%)可以用于新一代的新一代。“废物”。当然,可以回收98%的物体是一般方案中的数据。我们无法确保每次恢复的不超过10%的生存。当幸存者空间还不够时,我们需要依靠其他记忆(以下简称tohandle促销。

  记忆的分配保证就像我们去银行借钱一样。如果我们享有良好的声誉,我们可以按98%的时间按时偿还,因此银行可能违约至下一次我们可以按时偿还贷款。我们只需要有保证的人可以保证,如果我不能偿还,他们可以从他的帐户中扣除钱,而银行认为没有风险。分配保证的记忆也是如此。如果另一个幸存者空间没有足够的空间来存储新一代收集的生存对象,这些物体将通过分配保证机制直接进入旧一代。

  分配保证机制通常将每个回收利用到老年对象容量作为体验价值的平均值,而与老年的剩余空间相比,如果剩余空间足够将执行全GC;如果担保失败,则在次要GC之后的保证失败,需要全GC。在记忆分配和回收策略中,可以解释更多具体的策略。

  也称为标记压缩算法。标记过程仍然与“标记拆卸”算法相同,但是后续步骤并未直接清除以可回收的对象,而是将所有存活的物体移至一端,然后将其移动到一端,然后将其移动到一端直接清除末端边界外的内存。”算法的示意图如下所示。

  优点和缺点与解决标记算法的破碎问题的去除算法相同。同时,标签压缩算法还有一个步骤。对象的移动内存位置的步骤也具有一定的影响。

  以前,引入了各种回收算法。每种算法都有其自身的优势和缺点。没有人可以取代任何人。因此,它是基于垃圾回收对象的特征的明智选择。

  目前,主流JVM垃圾收集采用了“一代集合算法”的综合算法。该算法将根据对象的不同生存周期将记忆分为几个部分。该机构的特征采用了JVM中最合适的GC算法,年轻一代适合使用复制算法,并且老一代是适用于使用标记清除或标记算法。

  在JDK1.7的新的G1垃圾收集器中,采用了最新的“分区集合算法”综合算法来取消传统的部门机制。连续不同的社区(Regin),独立使用每个社区(可以用作伊甸园,幸存者,幸存者,幸存者,古老,谦卑等),独立恢复(所使用的基本算法是复制算法,并且具有自然的局部压缩),尽管尽管它具有局部压缩),尽管它具有自然的局部压缩),尽管它是)尽管它具有局部压缩),尽管它具有局部压缩),尽管它具有局部压缩),尽管它具有自然定位),尽管它具有局部压缩),尽管它具有局部压缩),尽管它具有局部压缩)),尽管它是自然局部的),但在GC时也需要STW,但是使用小分区的方法可以控制一次可以回收多少个社区。根据目标暂停的说法,每次都可以回收许多社区(而不是整个堆),从而减少GC一次生成的暂停。分区(Regin)。