Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助了解可用的JVM“;“垃圾收集算法”;及;垃圾收集器“;_Java_Garbage Collection_Jvm - Fatal编程技术网

Java 需要帮助了解可用的JVM“;“垃圾收集算法”;及;垃圾收集器“;

Java 需要帮助了解可用的JVM“;“垃圾收集算法”;及;垃圾收集器“;,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,我正在浏览链接以了解可用的JVM垃圾收集算法,结果弄糊涂了 据我所知,不同的JVM厂商将实现一些标准GC算法来创建垃圾收集器 现在请帮助我了解以下是算法还是算法的实现: 连载 平行的 CMS G1 我认为这些类型的垃圾收集器实现了一些特定的算法(我不知道算法的名称) 我还阅读了在上发表的关于JVM垃圾收集的白皮书,但并没有弄清楚垃圾收集算法和垃圾收集器之间的区别 一些文件提到“年轻一代垃圾收集算法/老一代垃圾收集算法” 这是否意味着串行垃圾收集器(垃圾收集器类型)使用“年轻一代垃圾收集算法”和“

我正在浏览链接以了解可用的JVM垃圾收集算法,结果弄糊涂了

据我所知,不同的JVM厂商将实现一些标准GC算法来创建垃圾收集器

现在请帮助我了解以下是算法还是算法的实现:

  • 连载
  • 平行的
  • CMS
  • G1
  • 我认为这些类型的垃圾收集器实现了一些特定的算法(我不知道算法的名称)

    我还阅读了在上发表的关于JVM垃圾收集的白皮书,但并没有弄清楚垃圾收集算法和垃圾收集器之间的区别

    一些文件提到“年轻一代垃圾收集算法/老一代垃圾收集算法”

    这是否意味着串行垃圾收集器(垃圾收集器类型)使用“年轻一代垃圾收集算法”和“老一代垃圾收集算法”分别对年轻和老一代区域进行GC


    请帮助我清楚地了解算法的类型和垃圾收集器的类型。

    Uff让我试着解释一下:)

    垃圾收集器可以有不同的算法,例如标记和扫描、标记和压缩、引用计数等(通常取决于系统的性能以及应用程序的范围)。 应用程序在堆上创建对象。 由于这些对象中的大多数都是在年轻时死亡的,因此堆将分为两个主要区域: 年轻一代和老一代。 在年轻的geneartion中,对象总是先着陆。这里有一些算法,可以将一些对象升级到旧一代。 因为处理旧一代中的对象通常需要很多性能,所以目标是让对象尽可能年轻地死去。 (这是非常基本的解释——年轻的血统也被划分为伊甸园和幸存者空间——所以我试着给出一个简单的概述)

    因此,垃圾收集器对不同的基因(年轻的和年老的)使用不同的算法。 此外,您不仅可以通过算法进行分离,还可以通过算法的执行方式进行分离: 串行、并行、并发……等等

    串行

    表示垃圾收集器正在串行模式下运行。串行模式将被使用,如果你只有在核心上。如果使用串行,垃圾收集器将停止world(stw阶段)并清除堆上的对象。 这会降低应用程序的性能

    并行

    垃圾收集器以并行模式运行。这种模式利用了多核系统的优势。因此,清理堆的任务是在线程中运行的。这样,垃圾收集器清除堆所需的时间更少。但您仍将有stw阶段,但它们花费的时间较少

    CMS-并发

    此垃圾收集器以并发模式运行。 因此,在垃圾收集器的某些阶段,任务在应用程序旁边运行。 例如,并发标记和Swepp:

    初始标记阶段-串行

    标记阶段-并发

    备注:相位-并联

    扫描阶段-并发

    在并发阶段,您将没有STW阶段

    G1

    是SUN(还是IBM?)开发的特殊垃圾收集器。 目前所有的算法都停止了世界阶段。 对于G1,他们试图说明这些阶段需要多长时间。 这是一个非常复杂的算法,但也有这个,不可能说stw阶段需要多长时间

    我认为这些类型的垃圾收集器实现了一些特定的算法(我不知道算法的名称)

    您列出的那些通常用作Oracle HotSpot JVM上下文中特定GC实现的名称,包括所有特定于实现的详细信息、调优选项等,以及它们所涉及的其他现实世界的奇怪之处。 当然,它们也基于抽象算法,这些算法可能与它们的名字相同,或者可以在一些科学出版物中描述,掩盖细节,只是模拟它们的理论行为

    区别并不总是如此明确。串行GC是最原始的算法:标记扫描、停止世界、单线程。根据JVM的不同,它可能会压缩,也可能不会压缩。如果我没记错的话,旧的android虚拟机在其串行GC实现中没有压缩

    所以,实际上,命名法是特定于上下文的。如果您正在阅读一篇关于并行、压缩、并发、无暂停收集器的研究论文,那么它并不是指热点的吞吐量(并行旧代)、并行清除(并行年轻一代)或parnew(年轻一代收集器与旧代CMS合作)收集器,只是因为提到了并行一词。 如果您阅读了一篇博客文章,描述了特定地面军事系统的性能特征和实际测量结果,它们可能涉及热点实施


    ,可能会因

    您需要了解的关于GC的所有信息(以及更多信息)而发生更改:很高兴看到您包含了许多关于JVM GC的要点。从你的回答中我得到了:1。对象生命周期及其分配,如从伊甸园到幸存者空间再到老一代。2.一些GC算法被命名为mark&sweep、mark&compact、引用计数等。垃圾收集器的类型,如串行、并行、CMS和G1。但我仍然不清楚不同GC使用的算法类型,如串行、并行、CMS(可能使用标记和扫描算法)和G1。如果您也能添加该部分,将非常有用