gpt4 book ai didi

java - 为什么 Java 垃圾收集器似乎在执行较不积极的运行后不久就进行了积极的运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:01 24 4
gpt4 key购买 nike

在使用 VisualVM 监视 Java 程序时,我注意到垃圾收集器行为中的一个有趣模式。似乎很多时候,在执行“正常”垃圾收集运行之后,GC 会执行第二次更密集的 cpu 运行,这似乎没有额外的效果(更积极的运行后使用的堆与它是在打火机运行之后)。

我已经在 VisualVM 的输出中指出,您可以在其中看到垃圾收集器的运行和相应的堆使用变化。

interesting garbage collector behaviour

我的问题基本上是垃圾收集器在这里做什么以及为什么?是什么导致它在有大量可用内存时尝试这些真正的 cpu 密集型运行,并且与较轻的运行相比没有明显的好处?还是我误解了图表?

程序的性能并没有真正受到影响,我只是好奇。

最佳答案

查看图表是了解 GC 运行概况的好方法,但如果您想研究 GC 在特定时刻运行的原因,您需要深入挖掘 GC 日志

启用完整的 GC 日志记录,同时开始收集 jstat。关注那些你看到意外 GC 周期的时间,并在日志中追溯它们。你在那里看到了什么?试试看:

  • 是完全 GC 还是次要 GC?
  • 什么是 eden、perm、oldGen、survivor 空间等的占用?
  • 这些时间间隔内的分配率、实时数据集大小、晋升率是多少?
  • 等等

回答这些问题可能会将您引向 GC 为何运行的问题。

更新:您可以找到关于如何调整 GC 的技术细节,例如在:Is there a cookbook guide for GC problems?

关于java - 为什么 Java 垃圾收集器似乎在执行较不积极的运行后不久就进行了积极的运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com