Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HashMap具有旧值,直到它们停止被引用为止_Java_Android_Concurrency_Hashmap - Fatal编程技术网

Java HashMap具有旧值,直到它们停止被引用为止

Java HashMap具有旧值,直到它们停止被引用为止,java,android,concurrency,hashmap,Java,Android,Concurrency,Hashmap,我在android应用程序的HashMap中加载了一些应用程序级的数据。我使用此映射中的一个条目(在HashMap中使用特定的keyA)来初始化我的活动中的一些数据,此活动会挂起一段时间。当用户进行此活动时,我引用keyA对象的HashMap可能会更改。更新HashMap的代码是我写的。当我想更新HashMap时,我想清除整个HashMap(这样它的size()返回0)并想再次填充所有内容。如果我调用HashMap.clear(),它会使旧对象被垃圾收集吗 如果是,那么清除整个HashMap的最

我在android应用程序的
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
对您不想离开的对象有引用,它就不会离开。如果您对它有引用,它就不会被垃圾收集。这就是垃圾收集器的工作原理。感谢您的快速评论。我已根据具体情况更新了问题。请考虑再读一遍。不清楚,你在问什么?你更新的问题还不清楚。总之,前两条注释很好地暗示了您需要知道的内容,只要
活动
对您不想离开的对象有引用,它就不会离开。如果您对它有引用,它就不会被垃圾收集。这就是垃圾收集器的工作原理。感谢您的快速评论。我已根据具体情况更新了问题。请考虑再读一遍。不清楚,你在问什么?你更新的问题还不清楚。总之,前两条评论很好地暗示了您需要知道的内容