【问题标题】:Is it possible to change the frequency of the garbage collector in Java?是否可以更改 Java 中垃圾收集器的频率?
【发布时间】:2021-10-18 16:41:54
【问题描述】:

有什么办法可以改变垃圾收集器的频率,是降低还是提高?

我发现一些文章说,为了提高频率,我需要增加年轻代,以便在调用 GC 之前让更多的对象进入。

但我在任何地方都没有找到真正的方法来做到这一点,用真正的命令或动作或指令如何实现它(减少或增加 GC 频率)。

【问题讨论】:

    标签: java object memory garbage-collection frequency


    【解决方案1】:

    你首先配置你想使用哪个垃圾收集器,然后你可以配置所说的垃圾收集器。

    你读到的任何内容都是不相关的/无效的/误导性的/过于简单化了。垃圾收集非常复杂,特别是复杂到谈论“频率”并没有真正意义。 20 年前的垃圾收集很简单:

    • 冻结每个线程。
    • 列出所有活动对象。
    • 遍历这些对象以查找从这些活动对象中可到达的所有对象,然后继续遍历。
    • 从分配给 JVM 的堆内存中的位置 0 开始,开始移动每个仍可访问的对象,并在移动过程中更新所有指针,从而默默地覆盖所有不可访问的对象。
    • 现在你已经完成了;内存被很好地压缩,大量可用空间,解冻世界。

    那个型号?它在 20 年前就去世了。垃圾收集现在要复杂得多,包括以下方面:

    • 实时跟踪:JVM 使用启发式机制来快速收集垃圾子集。 (基本上,引用计数;如果 refcount 为 0,则肯定是垃圾。但是,非 0 引用计数也可能是垃圾,例如,如果 a 引用 b,b 引用 a,并且没有任何 'live' 引用:两者refcounts 为 1,但它们仍然是垃圾)。这些垃圾收集器仍然收集它们,只是没有 refcount-0 垃圾那么快。 “频率”现在是什么意思?

    • 世代,世代之间的方法截然不同。例如,您的基本伊甸园/“快速垃圾”系统反向工作:Java 线程获得一页内存,在此处创建新对象,任何其他线程完全无法访问。一旦它满了,系统会快速检查这个和只有这个线程当前可以在上下文中访问的内容,创建一个新页面,复制仍然可以访问的对象,并将旧页面标记为空闲。 “免费垃圾收集”刚刚发生。这里的“频率”到底是什么意思?无需配置:当页面已满时,此过程将启动。直到页面已满,否则不会。无需配置。

    这只是垃圾收集器所做的大约 50 件事情中的 2 件,不能简单地描述为可以明确应用“频率”一词的事情。

    每个 JDK 版本都对可用的 GC 实现、这些实现的工作方式、甚至这些实现支持的设置进行了相当大的更改。这些都不是核心 java 规范的一部分,这意味着 OpenJDK 团队在不同 java 版本之间更改它们时更加随意,出于同样的原因,Azul、coretto 等替代 JDK 提供程序通常会提供额外的 GC 实现和额外的设置.

    那我该怎么办?

    别担心。一般的经验法则是:如果你弄乱了 GC 设置,你会让一切变得更糟。如果您需要调整 GC 设置,请咨询专家,并放心,您不太可能需要它。

    忘记你读过的东西。这是过时的信息。

    【讨论】:

    • 感谢您的回答。我知道我们不应该弄乱 GC 设置,但我的问题更多的是理论而不是实际。 frequency 指的是 GC 运行的速率。我能否以某种方式使其每 X 分钟运行的次数多于/少于默认情况下运行的次数?
    • 没有“GC 运行的速率”之类的东西。它一直运行。或不;取决于 GC impl。或者是 18 个不同的组件在完全不同的时间运行并且相互影响。除了最古老、最基本的 GC 实现之外,没有 GC 频率之类的东西,而且您不想要这些。鉴于没有这样的东西,你不能配置不存在的东西。任何你可以配置的东西都有一个属性:如果你弄乱了它并且你不知道你在做什么,你会让事情变得更糟。
    • 您能否在您的答案中添加一种方法来编辑和更改最古老的最基本的 GC 实现中所谓的 GC“频率”?
    • 我不知道怎么做,而且我怀疑用以下内容更新答案是个好主意:“这是一个火箭筒,它的自动归位系统被锁定在你自己的脚上。”
    • 有一条规则适用于大多数垃圾收集器。如果您希望它们运行得更少,请给 JVM 更多的堆内存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2011-01-26
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2013-12-29
    相关资源
    最近更新 更多