【问题标题】:Java 7 Default GC for server服务器的 Java 7 默认 GC
【发布时间】:2025-12-21 14:30:11
【问题描述】:

(a) 在 GC 日志中,即使 应用程序处于空闲状态。这与 JIT 或其他一些 JVM 有关吗 内部运作?

2015-03-05T14:42:18.320+0000: 520807.126: Total time for which application
threads were stopped: 0.0000500 seconds
2015-03-05T14:42:18.320+0000: 520807.126: Application time: 0.0000240
seconds
2015-03-05T14:42:18.320+0000: 520807.126: Total time for which application
threads were stopped: 0.0000500 seconds
2015-03-05T14:42:58.405+0000: 520847.212: Application time: 40.0857170
seconds
2015-03-05T14:42:58.406+0000: 520847.212: Total time for which application
threads were stopped: 0.0001980 seconds
2015-03-05T14:42:58.406+0000: 520847.212: Application time: 0.0000250
seconds
2015-03-05T14:42:58.406+0000: 520847.212: Total time for which application
threads were stopped: 0.0000520 seconds
2015-03-05T14:43:28.406+0000: 520877.213: Application time: 30.0001550
second

(b)使用默认的 GC 收集器。我们正在尝试在日志中打印任期分布,但它不会打印。

我们已经尝试过 +PrintTenuringDistribution 和 -PrintTenuringDistribution,但都不起作用。这是否未配置为与默认并行 GC 一起使用?

服务器信息

OS: RHEL 6
Cores: 24
RAM: 37GB
Java: Oracle JDK 7 Update 45

【问题讨论】:

    标签: java garbage-collection jit


    【解决方案1】:

    (a) 在 GC 日志中,即使应用程序空闲,我也可以看到以下行打印。这与 JIT 或其他一些 JVM 内部操作有关吗?

    不太可能。

    在正常情况下,ff 应用程序(真的)空闲,不会有任何 JIT 编译或任何其他 JVM 内部活动。这意味着 GC 不会运行。

    我怀疑该活动是由您正在使用的 javaagent 引起的;例如监控JVM。 (一个javaagent在正常运行下会产生垃圾……)


    这是否未配置为与默认并行 GC 一起使用?

    我已经看到证据(Google 搜索结果)表明它确实适用于 Java 7 中的默认并行 GC。我会检查您是否正确指定了该选项;即

      -XX:+PrintTenuringDistribution
    

    【讨论】:

    • 感谢您的回答。我将重试打印任期分布。当我的意思是空闲时,我指的是通常的处理。如果有垃圾收集,我不应该像在活动期间看到的那样在 GC heap/young 之前和之后看到等信息吗?还将检查是否为该时间段配置了 javaagent。
    • 这些日志消息实际上可能是由 javaagent 活动引起的。代理可能必须冻结所有线程才能执行某些操作……这可能会被记录。