我正在运行游戏,当我启动时,我将图像加载到WeakHashMap
图像中。当我运行游戏时,我的RAM一直在上升,然后我的WeakHashMap
最终卸载了所有数据。这与垃圾收集有关吗?任何解决方案?
答案 0 :(得分:1)
您可以使用SoftReferences而不是WeakReferences创建HashMap - 垃圾收集器对GC的关注度稍差。只需复制WeakHashMap源代码,用SoftReferences替换WeakReferences。
答案 1 :(得分:0)
正如Louis Wasserman所说,这是预期的行为。我想你可能想要一个普通的hashmap。请在http://docs.oracle.com/javase/6/docs/api/java/util/WeakHashMap.html
阅读有关WeakHashMap的文档答案 2 :(得分:0)
java.util.WeakHashMap
是一种地图类型,正如其描述所暗示的那样,仅保留对其键的弱引用。如您所知,弱引用是不会阻止垃圾收集器收集引用对象的引用。为了防止对象被垃圾收集,您必须在某处保持对该对象的强引用。
如果您希望保护数据不受垃圾回收的影响,请将其存储在常规HashMap
中。对于您的特定应用程序,您可能希望编写自己的地图实现,以保留软引用(gc仅在必须时清除的参考,而不是总是清除)到图像,并且当该艺术是时,它会自动加载缺少的艺术呼吁。 (如果你需要它是所有线程安全的,可能会很棘手,但是......)