【问题标题】:how to make refrences of hashmap/arraylist null in java to release all memory如何在java中使hashmap/arraylist的引用为null以释放所有内存
【发布时间】:2015-10-21 20:27:36
【问题描述】:

HashMap.clear()ArrayList.clear() 是否释放内存以缩小大小或大小保持不变?

如何使数组列表或哈希映射引用null 被允许用于 gc。

【问题讨论】:

    标签: java core


    【解决方案1】:

    如果你clear() 你的MapCollection,那么垃圾收集器可以收集其中包含的对象,只要它们没有在其他地方引用。与删除对MapCollection 本身的所有引用相同(通过将其设置为null):例如,只要Map 是唯一“知道”这些引用的对象,删除所有引用到Map 本身将允许垃圾收集器收集Map 以及其中包含的对象(当然,只要它们没有在其他地方引用)。

    但是仅仅清除 Map 并不能保证垃圾收集器会真正运行——它只是可以从内存中清除这些对象,如果它运行的话。但通常你不应该担心这一点。所以你很可能不会注意到调用clear() 会直接和立即获得内存,但这只是因为垃圾收集器不会一直运行。

    【讨论】:

    • 同意,你需要做的就是调用 clear(),然后让 GC 在需要 +1 时完成它的工作
    • 可能值得补充的是,放开 Collection 通常会更快。将其设置为= new Xxx(); 通常比清除要快。
    • 可能是真的,因为clear() 显然必须做一些工作。另一方面,我们在这里谈论的是非常琐碎的任务,通常clear() 不应该比new ... 花费更长的时间,至少不足以证明过早优化是合理的,我猜。如果它确实需要更长的时间,人们应该考虑它所做的工作是否真的有用。
    【解决方案2】:

    调用 clear 将删除集合中的所有元素,如果您没有对集合中对象的其他引用将使它们有资格进行垃圾收集。

    将 null 分配给您的收藏将与上述基本相同,但它也会影响您的收藏。如果没有对该集合的进一步引用,它将变得无法访问并且有资格进行垃圾收集。如果您不保留对该集合中对象的其他引用,它们也可能被垃圾回收。

    【讨论】:

      猜你喜欢
      • 2016-10-08
      • 2014-08-17
      • 1970-01-01
      • 2019-06-13
      • 2010-12-06
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多