【问题标题】:WeakHashMap Randomly clearsWeakHashMap 随机清除
【发布时间】:2013-04-29 23:59:12
【问题描述】:

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

【问题讨论】:

  • 你期待什么?仅当您希望在可以垃圾收集密钥时删除条目时才使用WeakHashMap
  • WeakHashMap 旨在用于缓存,其中数据可能会不时出现“噗”的一声,但如果发生这种情况,可以从网络或其他来源重新加载。

标签: java garbage-collection weakhashmap


【解决方案1】:

您可以使用SoftReferences 而不是 WeakReferences 创建一个 HashMap - 垃圾收集器将不太热衷于 GC 处理它。只需复制 WeakHashMap 源代码,将 WeakReferences 替换为 SoftReferences。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-08-06
        • 1970-01-01
        • 1970-01-01
        • 2011-12-06
        • 2019-03-18
        • 2014-04-15
        • 2011-10-28
        • 2020-04-05
        • 2019-07-24
        相关资源
        最近更新 更多