垃圾收集通知?

40

我想在JVM中注册一个回调函数,以便我知道何时发生垃圾回收。有没有办法做到这一点?

编辑:我想这样做是为了在我的应用程序日志中记录垃圾回收发生的时间,以便我可以查看它是否与我所看到的问题相关。打开-Xloggc很有帮助,但将GC日志中的时间(使用应用程序启动后的秒数)集成到我的主应用程序日志中有点棘手。

编辑于2012年4月:自Java7u4以来,您可以从GarbageCollectorMXBean(一个不错的示例)获取通知。


理想情况下,开发人员不应该关心GC何时发生。您可以在JVM参数中进行一些设置。只是出于好奇,您想要做什么?也许有更好的事件可供注册。 - Jay
16
@Jay,我们并非生活在一个理想的世界。如果你真的关心你的服务能够正常运行,那么当垃圾回收发生得太频繁时,你可能需要发出警报,因为这可能是问题的信号。 - tster
1
不错的问题。如果GC通知可以与负载均衡器集成,以避免在GC期间向实例发送流量,那就太好了。 - Alex R
@AlexR 或者 反过来:定期选择一个服务器,不再向其发送更多请求,让它完成正在运行的请求,让它执行垃圾回收,并重新激活该服务器。 - maaartinus
11个回答

0
如果您将此视为诊断工具,我建议将应用程序日志重定向到StdOut,然后将StdOut和StdErr都重定向到文件中。这将为您提供JVM日志的详细信息,而无需强制更改应用程序代码。

当我写这个的时候,我开始想知道JVM日志是否可以重定向到你的应用程序日志框架中。你使用什么应用程序记录器? - kdgregory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接