2013-02-25 65 views
3

从我所经历的情况来看,地图是Grails和Groovy开发中非常常见的成语。现在我已经转移到了一个更传统的Java项目中,我的技术主管很难用HashMaps - >我理解他的推理原因。 HashMaps使用StrongReferences。任何时候都有一个参考链。Grails,地图和内存管理

我在Groovy中看到的一个常见习惯是使用地图来取代POJO。 (就像在网上浏览示例时所看到的那样)。

Grails如何用它的所有地图习语解决这个问题?有没有人在他们的Grails应用程序上完成内存分析?像params这样的地图是否会暂停一段时间,或者他们是否可预测地死亡并在用户会话终止时收集?或者我需要像在Java中一样认识Grails中的Maps

=======更新==== 问题上面仍然有效,但用于参考的文章是here:中HashMap

+0

'params'只在一个请求期间有效。 – ataylor 2013-02-25 19:26:11

回答

3

实例没有从Java中的任何其它类的实例不同 - 只要地图(分别为POJO)可达,那么地图条目(POJO中的相应字段)所引用的所有其他对象也都可以访问。一旦地图(POJO)实例未被引用通过地图(POJO)可达的所有条目(字段)只有将有资格进行垃圾收集。

在这方面,地图不比其他类更好或更差。

+0

我发布了让我提出问题的文章。然后,理由是,至少我们需要认识到,我们不会将长寿命的'StrongReference'放入任何默认临时'Maps'中 – avgvstvs 2013-02-25 17:49:25

1

我不购买不使用Google地图的强引用参数。

在没有任何对HashMap的引用之后,它就成为GC的可用参数,并且在此之后,其他所有未被别名引用的元素也变为可用。

对于保存其值的地图,直到您无法访问它们,请查看WeakHashMap