代码之家  ›  专栏  ›  技术社区  ›  ReneS

如何在GC期间降低弱ref处理时间?

  •  10
  • ReneS  · 技术社区  · 14 年前

    线程停止时间 总是接近弱引用处理时间。所有其他GC周期为0.0001秒到0.200秒。

    10388.186: [GC[YG occupancy: 206547 K (306688 K)]10388.186: [Rescan (parallel) , 
     0.1095860 secs]10388.295: [weak refs processing, 2.0799570 secs] 
     [1 CMS-remark:  2973838K(3853568K)] 3180386K(4160256K), 2.1899230 secs] 
     [Times: user=2.51 sys=0.00, real=2.18 secs]
    Total time for which application threads were stopped: 2.1906890 seconds
    

    目前我有这些设置到位。尝试了更简单的设置,但没有改变。

    -Xms4g
    -Xmx4g
    -XX:NewSize=128m
    -XX:+UseConcMarkSweepGC
    -XX:+CMSIncrementalMode
    -XX:MaxGCPauseMillis=50
    -XX:CMSInitiatingOccupancyFraction=50
    -XX:ParallelGCThreads=16
    -XX:+DisableExplicitGC
    

    如果我打开NewSize,我会得到很长的正常GC周期。这台机器有8个内核,不会为应用程序消耗那么多cpu。试图尽早并同时运行旧的gen GC。

    是的,我无法摆脱弱ref用法,因为这是第三方库的一部分。

    1 回复  |  直到 14 年前
        1
  •  7
  •   Stephen C    11 年前

    我发现 this message 在“热点gc使用”邮件列表中。

    -XX:+ParallelRefProcEnabled 切换。


    更新

    我在Jon Masamitsu那里找到了更好的解释 Weblog :

    对于使用 Reference 对象广泛地,GC处理引用对象的工作是显而易见的。低暂停收集器中的情况不一定比其他收集器中的情况更糟,但会更痛(因为我们试图保持低暂停)。并行引用处理可用于低暂停收集器,但默认情况下不启用。除非有大量的引用对象,否则按顺序执行引用处理通常更快。用旗子把它打开 如果你广泛利用 参考 对象(大多数应用程序没有)。