3

我目前正在进行一项涉及 JVM 以及它的内存使用如何工作的研究。我不明白的是,JVM 在空闲时用什么填充它的内存,只是为了在几乎达到堆时释放它?为什么没有一条平坦的已用内存线?顺便说一句,这个 java 应用程序托管在 glassfish 上,但是当我只有一个简单的“hello world”swing 应用程序时,我有相同的图表。所以 GlassFish 不必对它做任何事情。

在此处输入图像描述

提前致谢!

4

1 回答 1

7

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

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

为什么没有一条平坦的已用内存线?

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

于 2012-10-29T14:34:51.080 回答