0

我正在运行一个游戏,当我启动时我将图像加载到WeakHashMap图像中。当我运行我的游戏时,我的 RAM 一直在增加,最后我WeakHashMap只是卸载了他们所有的数据。这与垃圾收集有关吗?有什么解决办法吗?

4

3 回答 3

1

您可以使用SoftReferences而不是 WeakReferences创建一个 HashMap - 垃圾收集器对 GC 的渴望会少一些。只需复制 WeakHashMap 源代码,将 WeakReferences 替换为 SoftReferences。

于 2013-04-30T00:19:18.857 回答
0

Ajava.util.WeakHashMap是一种映射类型,正如它的描述所暗示的那样,它只保留对其键的弱引用。如您所知,弱引用是不会阻止垃圾收集器收集被引用对象的引用。为了防止对象被垃圾回收,您必须在某处维护对该对象的强引用。

如果您希望保护数据免受垃圾收集,请将其存储在常规的HashMap. 对于您的特定应用程序,您可能希望编写自己的地图实现,以保留对图像的软引用(gc 仅在必须清除时才清除的引用,而不是始终清除),并在该艺术作品出现时自动加载缺失的艺术作品要求。(如果你需要它是所有线程安全的,可能会很棘手......)

于 2013-04-30T00:51:02.237 回答
0

正如 Louis Wasserman 所建议的那样,这是预期的行为。我想你可能想要一个普通的哈希图。请在http://docs.oracle.com/javase/6/docs/api/java/util/WeakHashMap.html阅读有关 WeakHashMap 的文档

于 2013-04-30T00:11:32.167 回答