3

我想知道。我有一个带有 servlet 的简单 Java Web 项目。当没有用户使用它时(我在 GlassFish 上本地托管它),我仍然在进程的内存使用中看到锯齿模式。我似乎无法理解 JVM 在做什么?我了解JVM使用的内存的正常流动。堆中充满了应用程序正在创建的对象。在某个点,堆到达垃圾收集器进入的点,它将删除所有不再使用的“缓存”对象,以便可以创建新对象并可以填充堆大小。

我想知道的是,JVM 在空闲时一直在做什么?在此处输入图像描述

编辑:

就像我在评论中说的那样。我在 Eclipse 中创建了一个非常简单的 Java 应用程序,它显示了一个 Swing 窗口,上面写着“hello world”。当我在 Java VisualVM 中观察 JVM 的内存使用情况时,我看到了相同的锯齿模式。

4

2 回答 2

9

事实证明,VisualVM 是罪魁祸首。这是因为 VisualVM 不断地询问 JVM 它的统计数据是什么,因此 JVM 创建对象以将信息提供给 VisualVM。

谢彼得劳里

于 2012-10-29T15:23:54.490 回答
3

我的猜测是应用服务器正在做某种幕后记账。请记住,即使没有人使用它,仍然有线程在后台运行。另外,您的应用程序是否使用任何类型的按时间顺序触发的框架,例如 Quartz?或者,日志记录呢。即使它可能没有主动将日志消息发送到文件,记录器仍然被调用,这导致各种事物被创建/销毁。

于 2012-10-18T15:37:45.860 回答