我在想。我有一个带有servlet的简单Java Web项目。当没有用户使用它时(我在GlassFish上本地托管它)我仍然在进程的内存使用中看到锯齿模式。我似乎无法理解JVM正在做什么?我理解JVM使用的内存的正常流程。堆正在填充应用程序正在创建的对象。在某个时刻,堆到达垃圾收集器进入的点,这将删除所有不再使用的“缓存”对象,以便可以创建新对象并填充堆大小。
我想知道的是,JVM在空闲时一直在做什么?
编辑:
像我在评论中所说的那样。我在Eclipse中创建了一个非常简单的Java应用程序,它显示了一个Swing窗口,上面写着'hello world'。当我在Java VisualVM中观察JVM的内存使用情况时,我看到了相同的锯齿模式。答案 0 :(得分:8)
事实证明,VisualVM是有罪的。这是因为VisualVM不断向JVM询问它的统计信息是什么,因此JVM创建了向VisualVM提供信息的对象。
谢谢 Peter Lawrey
答案 1 :(得分:3)
我的猜测是应用服务器正在进行某种幕后的簿记。请记住,即使没有人使用它,仍然有后台运行的线程。此外,您的应用程序是否使用任何类型的按时间顺序的触发器框架,如Quartz?或者,如何记录。尽管它可能没有主动向文件发送日志消息,但仍然会调用Logger,这会导致创建/销毁各种事物。