gpt4 book ai didi

java - 单例模式的每个 Gem 内存不足

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:29 24 4
gpt4 key购买 nike

只是想知道我是否有具有非静态 map 的单例对象。为什么映射中的对象将进入 Pergem 空间而不是堆中。我可以从 Visual VM 中看到,随着 Map pergem 空间中对象的间隔不断增加。

我所知道的只是静态变量和类位于 pergem 空间中,其余所有对象都应该位于堆中。

这是因为单例模式,其中单例对象是静态的,因此引用指向堆,但在 pergem 中仍然保留大小?

如果是这种情况,有什么办法可以解决这个问题。

最佳答案

您的问题的答案是:是的。具体来说,只要[1]您从静态变量直接或间接引用一个对象,那么该对象就无法被垃圾回收,并且最终将进入永久生成阶段。

解决方案是不使用单例。但是,这并不能真正解决您的问题,因为根据您的问题,您遇到的真正问题是 HashMap 不断增长。如果您将其用作某种形式的缓存,那么您还需要在缓存上设置某种过期时间,无论是时间还是大小,否则它将继续增长,直到出现 OOM。

[1] 或多或少是正确的,但在存在某些类加载器技巧的情况下,这可能不是正确的。

关于java - 单例模式的每个 Gem 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410309/

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