JVM锯齿空闲进程

我正在进行一项研究,调查一下JVM以及它的内存使用情况。 我不明白的是,JVM在空闲时填充它的内存是什么,只是在几乎达到堆时释放它? 为什么不只有一个扁平的旧内存? 顺便说一句,这个java应用程序托管在glassfish上,但是当我有一个简单的’hello world’swing应用程序时,我有相同的图表。 所以GlassFish不必对它做任何事情。

在此处输入图像描述

提前致谢!

什么JVM在空闲时填充它的内存,只是在几乎达到堆时释放它?

如果您的应用程序真正空闲,最可能的情况是VisualVM。 尝试降低采样率并查看速率存储器是否消耗也会下降。

为什么不只有一个扁平的旧内存?

JMX是用Java编写的,所以当它收集统计信息并序列化数据时,它会产生相当多的垃圾。 您可以打开内存分析以确认所有内存耗尽都与JMX和VisualVM相关。 如果使用使用本机代理监视JVM的商业概要分析程序,则不会看到此行为。 例如,YourKit不会这样做。