这种情况适合WeakReferences吗?

时间:2009-03-17 04:15:15

标签: java memory-management java-me memory-leaks mobile

我正在通过J2ME查询地址簿并返回自定义 Hashtable我将称之为 pimList pimList {firstname,lastname}中的键映射到一个对象(我们称之为 ContactInfo ),保持(键,值)对,例如work1 - > 44232454545,home1 - > 44876887787

接下来,我将 firstName 添加到树中。 树的节点包含 firstName 中的字符。 例如“Tom”会创建一个包含节点的树:

"T"->"o"->"m"-> ContactInfo{ "work1" -> "44232454545", "home1" -> "44876887787" }

因此,最后一个字符 m 的子节点指向 pimList 中的同一对象实例。 据我所知,WeakReferences的目的是它的指针很弱,它指向的对象可以很容易地用GC。在像手机这样的内存约束设备中,我想确保不泄漏或浪费内存。因此,对我来说是否合适:

  1. pimList 的值为WeakReference
  2. 节点“m”的子节点指向WeakReference

3 个答案:

答案 0 :(得分:1)

它应该工作。您需要处理使用返回的Hashtable的情况,然后收集项目......这可能意味着您想重新考虑整个事情。

如果Hashtable是短暂的,则可能不需要弱引用。

如果您希望在Hashtable的剩余部分被使用时可以清理它们,则可以在完成Hashtable后删除这些项目。

答案 1 :(得分:1)

不确定我是否完全理解你尝试做什么,但是对象的可达性是由对它的最强引用决定的(硬引用比弱引用强,弱引用比弱引用更强)。

硬引用对象不会被垃圾回收。仅当JVM内存不足时,软引用对象才会被垃圾收集,弱引用对象将尽快被垃圾收集(理论上这取决于JVM和GC实现)。

所以通常使用softreference来构建缓存(您希望尽可能长时间地引用信息)。您使用弱引用将信息关联到某个地方硬引用的对象,因此如果不再引用了硬引用对象,则可以对相关信息进行垃圾回收 - 使用weakhashmap。

希望这会有所帮助...

答案 2 :(得分:0)

我不确定WeakMap在这里是否正确。如果您在应用程序的任何位置都没有强引用,那么地图中的数据几乎会立即消失,因为没有人引用它。

弱地图是一件好事,如果你想再找一些东西,它们仍在其他地方使用,你只想拥有它的一个实例。

但我可能无法正确设置您的数据......说实话。