gpt4 book ai didi

java - HashMap引起的内存泄漏

转载 作者:行者123 更新时间:2023-11-29 06:02:58 26 4
gpt4 key购买 nike

由于代码中的 HashMap,我面临内存泄漏。当我第一次登录到应用程序时,这个 HashMap 被填充,我使用这个 Map 来缓存一些数据。

我在我的应用程序中的多个地方使用了这个缓存数据。

当应用程序没有运行时,它的大小在登录后不断增长。只有在自动调用垃圾收集器或我调用它的情况下,大小才会减少。

但在那之后它又开始增加。这肯定是内存泄漏,但我该如何避免呢?

我的探查器还显示 ResultSet.getString()Statement.execute() 作为热点内存分配。这些方法用于填充此缓存。

内存泄漏是因为这些方法吗?我已经在 finally block 中关闭了数据库连接。

为什么它仍然向我展示这些方法?

最佳答案

正如上面的评论所解释的,这听起来不像是内存泄漏。

在 java 应用程序中,JVM 将创建对象并耗尽内存。随着时间的推移,一些对象将超出范围(变得有资格进行垃圾收集),但在下一次收集发生之前,它们仍将位于堆中,“耗尽内存”。这不是问题,这就是 java 的工作原理。当 JVM 决定它需要释放内存时,它将运行一个集合,并且使用的内存应该下降。

你应该关心你所看到的吗?我可以想到两个你应该和一个你为什么不应该的理由。如果您的垃圾回收释放了足够的内存供应用程序继续运行,回收不会影响性能并且您正忙着做其他事情,那么我看不出您应该关心的理由。

但是,如果您担心您不了解该应用程序的详细工作原理,或者您有理由认为“这么多内存”是一个问题(您将来会希望使用更多数据运行该应用程序,或者希望在将来分配更少的堆来运行它),那么您可能需要进行调查。

如果应用程序什么都不做时内存被用完,那么我会专注于此。当它“什么都不做”时,它到底在做什么?我敢打赌它正在做“某事”

关于java - HashMap引起的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9462680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com