Java HashMap具有旧值,直到它们停止被引用为止
我在android应用程序的Java HashMap具有旧值,直到它们停止被引用为止,java,android,concurrency,hashmap,Java,Android,Concurrency,Hashmap,我在android应用程序的HashMap中加载了一些应用程序级的数据。我使用此映射中的一个条目(在HashMap中使用特定的keyA)来初始化我的活动中的一些数据,此活动会挂起一段时间。当用户进行此活动时,我引用keyA对象的HashMap可能会更改。更新HashMap的代码是我写的。当我想更新HashMap时,我想清除整个HashMap(这样它的size()返回0)并想再次填充所有内容。如果我调用HashMap.clear(),它会使旧对象被垃圾收集吗 如果是,那么清除整个HashMap的最
HashMap
中加载了一些应用程序级的数据。我使用此映射中的一个条目(在HashMap
中使用特定的keyA
)来初始化我的活动
中的一些数据,此活动
会挂起一段时间。当用户进行此活动时,我引用keyA
对象的HashMap
可能会更改。更新HashMap
的代码是我写的。当我想更新HashMap
时,我想清除整个HashMap
(这样它的size()
返回0)并想再次填充所有内容。如果我调用HashMap.clear()
,它会使旧对象被垃圾收集吗
如果是,那么清除整个HashMap
的最佳方法是什么,以便在代码中的其他地方引用旧对象时不会丢失它们。在这种情况下,将值重新分配给HashMap
的最佳方法是什么
PS:我正在使用
ReentrantReadWriteLock
来维护访问权限,如果这可能会有所帮助。如果您需要单独更新keyA,那么您可以使用HashMap.put(“keyA”,“value”)代码>
这将用您指定的值替换HashMap对象中的keyA值,并且不会影响保存在HashMap对象中的其他值。如果需要单独更新keyA,则可以使用HashMap.put(“keyA”,“value”)代码>
这将用指定的值替换HashMap对象中的keyA值,并且不会影响保存在HashMap对象中的其他值
我调用HashMap.clear(),它会使旧对象被垃圾收集吗
不会。如果Java对象是可访问的,则不会对其进行垃圾收集。如果有任何引用(或引用链)允许代码访问对象,则该对象不会被垃圾收集
我调用HashMap.clear(),它会使旧对象被垃圾收集吗
不会。如果Java对象是可访问的,则不会对其进行垃圾收集。如果有任何引用(或引用链)允许代码访问对象,则该对象不会被垃圾收集
如果我调用HashMap.clear(),它会使旧对象被垃圾收集吗
HashMap
只存储对对象的单个引用。调用clear()
时,如果(且仅当)对对象的唯一引用是HashMap
,则可以对该对象进行gc。如果代码的其他部分引用了该对象,那么它就不会被引用。gc就是这样工作的<代码>HashMap
不是魔法
在这种情况下,将值重新分配给HashMap的最佳方法是什么
如果您正在更新共享映射中的值,那么您的代码将不得不在它们使用时从映射中重新获取值,或者可能每隔一段时间。我会在你每次使用它时首先重新获得价值,然后在做任何其他事情之前向自己证明它太贵了
PS:我正在使用ReentrantReadWriteLock来维护访问权限,如果这可能有帮助的话
我会转而使用ConcurrentHashMap
,而不是自己进行锁定的费用和代码维护
如果我调用HashMap.clear(),它会使旧对象被垃圾收集吗
HashMap
只存储对对象的单个引用。调用clear()
时,如果(且仅当)对对象的唯一引用是HashMap
,则可以对该对象进行gc。如果代码的其他部分引用了该对象,那么它就不会被引用。gc就是这样工作的<代码>HashMap
不是魔法
在这种情况下,将值重新分配给HashMap的最佳方法是什么
如果您正在更新共享映射中的值,那么您的代码将不得不在它们使用时从映射中重新获取值,或者可能每隔一段时间。我会在你每次使用它时首先重新获得价值,然后在做任何其他事情之前向自己证明它太贵了
PS:我正在使用ReentrantReadWriteLock来维护访问权限,如果这可能有帮助的话
我会转而使用
ConcurrentHashMap
,而不是自己进行锁定的费用和代码维护。只要Activity
对您不想离开的对象有引用,它就不会离开。如果您对它有引用,它就不会被垃圾收集。这就是垃圾收集器的工作原理。感谢您的快速评论。我已根据具体情况更新了问题。请考虑再读一遍。不清楚,你在问什么?你更新的问题还不清楚。总之,前两条注释很好地暗示了您需要知道的内容,只要活动
对您不想离开的对象有引用,它就不会离开。如果您对它有引用,它就不会被垃圾收集。这就是垃圾收集器的工作原理。感谢您的快速评论。我已根据具体情况更新了问题。请考虑再读一遍。不清楚,你在问什么?你更新的问题还不清楚。总之,前两条评论很好地暗示了您需要知道的内容