许多监控工具,例如梦幻般的 JavaMelody ,只需监控当前内存使用情况。如果您想检查内存泄漏或即将出现的内存不足情况,并且您的应用程序会生成大量垃圾并立即收集,那么这并不是特别有用。不完美,但恕我直言,更有趣的是,在主要垃圾收集后立即监视内存使用情况。如果该值很高,则崩溃即将来临。
那么:您能否在最后一次主要垃圾回收之后立即找出内存使用情况 - 无论是从 Java 代码还是通过 JMX?我知道有一些工具,例如 VisualVM这样做(这不是生产使用的选项),并且可以将其写入垃圾收集日志中,但我正在寻找比解析垃圾收集日志文件更直接的解决方案。 :-) 需要明确的是:我正在寻找可以在生产中的任何应用程序中轻松使用的东西,而不是任何昂贵的调试工具。
如果重要的话:JDK 7 带有 -XX:+UseConcMarkSweepGC ,但我也对一般答案感兴趣。
最佳答案
有关 gc 之后可用内存(新的或旧的)的信息可通过 JMX 获得。
垃圾收集器 MBean 具有属性 LastGcInfo,它是复合数据对象,包括 GC 前后内存池大小的信息。
此外,从 Java 7 JMX 通知订阅开始,可用于接收 GC 事件而无需轮询。
您可以找到使用 GC MBean here 的代码示例.
关于java - 如何通过 JMX 或代码监视主要垃圾回收后的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398555/