gpt4 book ai didi

java - Java 垃圾回收的频率是多少?

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

文档第 6 页 Memory Management in the JavaHotSpot™ Virtual Machine包含以下段落:

Young generation collections occur relatively frequently and are efficient and fast because the young generation space is usually small and likely to contain a lot of objects that are no longer referenced.

Objects that survive some number of young generation collections are eventually promoted, or tenured, to the old generation. See Figure 1. This generation is typically larger than the young generation and its occupancy grows more slowly. As a result, old generation collections are infrequent, but take significantly longer to complete

有人可以定义上面陈述中的“频繁”和“不频繁”是什么意思吗?我们是在谈论微秒、毫秒、分钟、天吗?

最佳答案

对此无法给出明确的答案。这实际上取决于很多因素,包括平台(JVM 版本、设置等)、应用程序和工作负载。

在一种极端情况下,应用程序可能永远不会触发垃圾收集器。它可能只是坐在那里什么也不做,或者它可能执行非常长的计算,其中在 JVM 初始化和应用程序启动后没有创建任何对象。

在另一个极端,理论上有可能在几纳秒内开始一个垃圾收集结束和另一个垃圾收集结束。例如,如果您的应用程序正处于堆满而死的最后阶段,或者如果它正在分配病态的大数组,则可能会发生这种情况。

所以:

Are we talking microseconds, milliseconds, minutes, days?

可能是上述所有情况,但如果您在实践中观察到前两个,肯定会很麻烦。

行为良好的应用程序不应该过于频繁地运行 GC。如果您的应用程序每秒触发一次或两次以上的年轻空间收集,那么这可能会导致性能问题。过于频繁的“完整”收集更糟糕,因为它们的影响更大。但是,设计/实现不当的应用程序出现这样的行为当然是合理的。


还有一个问题是 GC 运行之间的间隔并不总是有意义。例如,一些 HotSpot GC 实际上有 GC 线程与普通应用程序线程同时运行。如果您有足够的内核、足够的 RAM 和足够的内存总线带宽,那么持续运行的并发 GC 可能不会明显影响应用程序性能。

术语说明:

  • 严格来说,并发 GC 是指 GC 可以与应用程序线程同时运行。
  • 严格来说,并行 GC 是 GC 本身使用多个线程的地方。
  • GC 可以并发而不是并行,反之亦然。

关于java - Java 垃圾回收的频率是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12599044/

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