繁体   English   中英

为什么堆内存使用图看起来像这样?

[英]Why does heap memory usage graph look like this?

我已经在我的 JVM 上安装了 glowroot(java 应用程序监控)。 当我的应用程序空闲时,我会得到这种内存堆使用情况图。 图案看起来几乎是统一的。 有人可以解释并指出我关于为什么图表看起来像这样的任何博客文章吗? 我好奇。

在此处输入图片说明

大规模锯齿图案表示 GC 周期之间的内存利用率。 应用程序稳定地分配对象(上坡线),直到堆满让 VM 决定运行 GC(重点)。 然后 GC 回收大量垃圾(急剧下降)并重新开始该过程。

向上和向下的短尖峰更难理解。 向上的尖峰可能代表了触发年轻代周期的异常“大”分配(短生命周期对象)。 向下的尖峰可能表示缓存对象因“内存压力”而被释放。

如果您想更好地了解峰值,您需要查看 GC 日志消息,并尝试将它们与图表相关联。

看起来像那样是因为(至少)您正在观察它。 如果您的应用程序完全没有做任何事情,并且没有线程进行任何分配,那么您将获得一条水平线作为堆。

但是,由于您正在观察它,因此 JVM 中正在执行一些操作以将这些数据返回给您。 这就是为什么您会在许多分析问题中看到无处不在的锯齿图案。 下面举几个例子。

java内存泄漏,visualvm显示错误数据

visualvm 监控内存使用情况

这是工作中的java垃圾收集。 每次删除都是垃圾收集器,通过删除未使用的引用来释放内存。 它再次增长的原因仅仅是因为您的应用程序不断创建新的引用。

您还可以查看这篇文章以获得更深入的解释: 为什么是锯齿形图?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM