2013-02-25 42 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