青岛专业设计网站公司,做推广哪个网站最热门,游戏动漫设计专业,太原建设公司网页模板世代垃圾收集器 JVM堆分为两个不同的世代。 一种称为“年轻”#xff0c;另一种称为“老”#xff08;有时称为终身制#xff09;。 年轻一代又分为两个主要的逻辑部分#xff1a;伊甸园和幸存者空间。 垃圾收集人员还使用了虚拟空间供年轻人和老年人使用#xff0c;以调整… 世代垃圾收集器 JVM堆分为两个不同的世代。 一种称为“年轻”另一种称为“老”有时称为终身制。 年轻一代又分为两个主要的逻辑部分伊甸园和幸存者空间。 垃圾收集人员还使用了虚拟空间供年轻人和老年人使用以调整其他区域的大小 主要是为了实现不同的GC目标。 弱代假设 为什么将堆分为年轻一代和老一代 这是因为通常会在较短的时间内创建并使用许多对象。 在GC理论中这种观察称为弱代假说。 想象一下一些仅在循环内部创建和使用的对象-假设它们将不被缩放 则每次迭代都将丢弃先前创建的对象并创建新的对象。 对象生命周期 物体从年轻一代的伊甸园开始旅程。 当年轻一代填满时将执行所谓的次要GC 停止所有应用程序线程停止世界暂停丢弃不再使用的对象并将来自伊甸园的所有其他对象移动到第一个Survivor空间S0。 下次执行次要GC时对象将从S0移到第二个Survivor空间S1。 来自伊甸园的所有活动物体也都进入S1。 请注意这导致幸存者空间中不同的老化对象–我们有来自伊甸园的对象和已经存在于幸存者空间中的对象。 次要GC的下一次迭代会将对象从S1移回到S0因此Survivor空间会切换每个GC。 为什么我们有两个幸存者空间为什么我们要切换它们 这非常简单–当对象达到一定的年龄阈值时它就会升格为“老一代”。 它导致幸存者空间碎片化可以通过将所有对象从S0移到S1并移回每个次要GC来轻松消除。 最终当旧一代填满时将在旧一代上执行大型GC 以清理并压缩该空间。 在主要GC期间是否以及如何发生世界停顿取决于所使用的特定GC算法。 除了次要和主要GC外还有一个完全GC 它用于清理整个堆-青年由次要GC和旧终身由主要GC生成。 因为完全GC包括次要GC所以无论使用哪种GC算法都会导致世界停顿。 摘要 将堆分为两个区域有两个主要优点。 首先仅处理堆的某些部分总是更快停止世界的停顿花费更少。 其次在次要GC中来自Eden的所有对象将被移动或丢弃这自动意味着堆的这一部分被压缩 翻译自: https://www.javacodegeeks.com/2017/09/gc-explained-heap.html