Java 完整的地面军事系统是否可以在其;努力;?

Java 完整的地面军事系统是否可以在其;努力;?,java,garbage-collection,Java,Garbage Collection,今天,另一位开发人员向我提到了一个想法,即完全GC(将显示在带有完全GC的详细GC日志中)可以在应用的工作中有所不同。例如,对于一个正常的完整收集,它将只应用80%的工作,从而缩短收集时间,但可能会使一些无法访问的对象处于未收集状态。如果回收率不够,或者花在这类集合上的时间增加太多,那么它将付出更大的努力,找到更多的对象,但可能需要更长的时间 我找不到这方面的任何参考资料,可能是因为我使用了错误的术语 这是真的吗,特别是对于任何Oracle Java 7 JVM收集器算法 谢谢简短回答:是的 详

今天,另一位开发人员向我提到了一个想法,即完全GC(将显示在带有完全GC的详细GC日志中)可以在应用的工作中有所不同。例如,对于一个正常的完整收集,它将只应用80%的工作,从而缩短收集时间,但可能会使一些无法访问的对象处于未收集状态。如果回收率不够,或者花在这类集合上的时间增加太多,那么它将付出更大的努力,找到更多的对象,但可能需要更长的时间

我找不到这方面的任何参考资料,可能是因为我使用了错误的术语

这是真的吗,特别是对于任何Oracle Java 7 JVM收集器算法

谢谢

简短回答:是的


详细回答:

关于热点GC算法:

G1收集器具有一个暂停时间目标,算法使用该目标来确定要回收多少空间以达到该目标,即在一定时间内完成。但是,这不仅涉及完整的GC,事实上,在G1的情况下,这涉及所有GC阶段。G1在运行时根据在前一阶段收集的数量和花费的时间调整每个阶段的收集策略(或“努力”)。有关更多详细信息,请参阅

CMS是一个增量GC,与G1类似,它的收集时间和工作量可能在每个GC阶段有所不同

另一方面,并行收集器是一种压缩收集器,将尽最大努力压缩整个OldGen

根据和,并行旧收集器并不总是收集所有范围外的对象。从:

请注意,在下图中,收集仅发生在堆的60%上(使 收集的速度是收集所有内容的速度的两倍),并回收82%的数据 垃圾这意味着为了收集额外的18%,垃圾收集器 必须像前82%那样努力工作!显然,这些都不是 精确的计算,但肯定指出了一点:这就是密集前缀的原因 这是一个重要的优化步骤


我不确定的是,它如何确定哪些地区“值得收藏”。这是否取决于需要提升到终身职位的数量?

谢谢。在发布问题之前,我查看了该链接,但什么也看不到。在哪一部分下,它说完整的集合将做出不同的努力?谢谢你-这太完美了。您知道并行旧GC收集器是否始终采用尽力而为的方式吗?是的。在并行旧GC阶段结束时,OldGen始终只包含活动对象,没有浮动垃圾。所有死物都在一个阶段收集。请参阅下面的@Paul Medcraft的答案。OldGen可以包含死对象,如果它们位于“密集前缀”的左侧(有关详细信息,请参阅)。但我不确定这是否意味着完整gc的工作可能会有所不同。这将取决于“密集前缀”是否在某种分配失败后移动