我正在运行一个游戏,当我启动时,我将图像加载到图像的WeakHashMap中。当我运行我的游戏时,我的内存一直在增加,然后最终我的WeakHashMap卸载了他们的所有数据。这是否与垃圾收集相关?有什么解决方案吗?
发布于 2013-04-30 08:19:19
您可以使用SoftReferences而不是WeakReferences来创建HashMap -垃圾收集器将不会那么急切地使用GCing它。只需复制WeakHashMap源代码,用SoftReferences替换WeakReferences即可。
发布于 2013-04-30 08:11:32
正如路易斯·沃瑟曼所说,这是意料之中的行为。我想你可能需要一个普通的hashmap。请在http://docs.oracle.com/javase/6/docs/api/java/util/WeakHashMap.html上阅读有关WeakHashMap的文档
发布于 2013-04-30 08:51:02
java.util.WeakHashMap是一种映射类型,正如其描述所暗示的那样,它只保留对其键的弱引用。如您所知,弱引用是不会阻止垃圾回收器收集被引用对象的引用。为了防止对象被垃圾回收,您必须在某个地方维护对该对象的强引用。
如果您希望保护数据不被垃圾回收,请将其存储在常规HashMap中。对于您的特定应用程序,您可能希望编写自己的map实现,以保留对图像的软引用( gc仅在必要时才清除的引用,而不是总是清除),并让它在调用缺少的图片时自动加载缺少的图片。(但是,如果您需要所有线程都是安全的,那么可能会很棘手……)
https://stackoverflow.com/questions/16290147
复制相似问题