我正在运行一个有点经典的 postgres/hibernate/spring mvc web 应用程序,具有非常常见的层/框架。 一切看起来都很好,除了当我查看 javamelody 中的内存图时: 我定期看起来它会增长,调用 gc,然后它再次增长: memory graph
当我转储内存时,它始终是一个 60/80 Mo 文件,显示使用的总内存约为 60/80 Mo,并且未检测到泄漏 如果我删除 javamelody 并使用 jconsole,它会显示同样的问题,内存不断增长(虽然有点慢) 我怎样才能看到这些+100Mo物体是什么,不断增长然后被GC?我该如何解决这个问题?
任何有关此类问题的帮助或解释将不胜感激!
提前致谢
编辑:我忘了提及该图来自一个隔离的环境,上面绝对没有用户 Activity (没有http请求/没有计划的作业)
最佳答案
这是 Java 垃圾收集器的预期行为。短期对象会在内存中累积,直到垃圾收集算法确定值得花时间回收该内存为止。
您可以分析内存转储(例如,使用 Eclipse Memory Analyzer )以发现这些对象在哪里,但请记住,这种情况不是问题(除非它们吃掉了您的所有内存)内存并抛出 OutOfMemoryError)。
关于Java网络应用程序: How to identify this memory issue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28707734/