Java-替换堆内存中的现有对象

Java-替换堆内存中的现有对象,java,heap-memory,jvisualvm,Java,Heap Memory,Jvisualvm,我在java web应用程序中使用Spring+Hibernate。我在网上读到,spring和hibernate将比平常使用更多的内存。我的内存经常不足。因此,我尝试使用jvisualvm分析我的tomcat。当我在内存中查看时,对象会不断添加(而不是替换现有对象) 例如:如果我正在加载一个产品对象列表(列表中有1000个对象),那么将在堆内存中添加1000个产品对象。如果我再次刷新数据网格,它将在堆内存中添加1000个对象,就像它不断增加一样(参见图)。有没有办法替换堆内存中现有的对象,而不

我在java web应用程序中使用Spring+Hibernate。我在网上读到,spring和hibernate将比平常使用更多的内存。我的内存经常不足。因此,我尝试使用jvisualvm分析我的tomcat。当我在内存中查看时,对象会不断添加(而不是替换现有对象)

例如:如果我正在加载一个产品对象列表(列表中有1000个对象),那么将在堆内存中添加1000个产品对象。如果我再次刷新数据网格,它将在堆内存中添加1000个对象,就像它不断增加一样(参见图)。有没有办法替换堆内存中现有的对象,而不是继续添加


否,不能替换堆上的对象。您可以做的是删除对该对象的所有引用并将其从列表中删除,Java的垃圾收集器将销毁该对象


请参阅垃圾收集上的此链接:

您确定您没有在某种程度上误用这两个API,例如忘记丢弃结果集或类似的东西吗?是的,我正在随时随地关闭会话。因此,它也将关闭结果集。此视图无法清楚显示您如何处理这些对象。尝试不同的可视化以检测消息调用。看看这个链接谢谢@fGo,我会看看这个url。谢谢@darijan,但我不想手动调用GC。因为,我听说使用
Sysytem.GC()
显式调用GC不是正确的方法。Java会自动做到这一点。是的,darijan,JVM会做到这一点。但是,随着越来越多的用户访问我的网站,我经常会出现内存不足的情况。如果不是内存泄漏,则服务器需要更多内存。但要调查GC是否真的拾取了对象。谷歌如何测试内存泄漏。必须删除对列表中所有对象的所有引用,并且必须删除该列表中的所有元素。它们不能是任何地方的引用。非常感谢@darijan,我会再次检查以查找内存泄漏。