我有一個多線程應用程序編寫和讀取ConcurrentLinkedQueue,它在概念上用於備份列表/表中的條目。我最初使用了一個ConcurrentHashMap來運行,效果很好。需要跟蹤訂單條目的新要求已送達,因此可以根據某些條件以最早的一級訂單取消訂單條目。 ConcurrentLinkedQueue似乎是一個不錯的選擇,在功能上它運行良好。
可配置數量的條目保存在內存中,並且當達到限制時提供新條目時,會按照最老的第一順序搜索可以刪除的條目。系統不會刪除某些條目,並等待客戶端進行交互。
似乎正在發生的事情是我在隊列的前面出現了一個條目,比如說前面的100K條目。該隊列似乎具有有限數量的配置項(size()== 100),但在分析時,我發現內存中有〜100K ConcurrentLinkedQueue $ Node對象。這看起來是有意設計的,只是看一下ConcurrentLinkedQueue的源代碼,刪除操作只是刪除對被存儲對象的引用,但爲迭代而留下鏈接列表。
最後我的問題:是否有一種「更好」的懶惰方式來處理這種性質的集合?我喜歡ConcurrentLinkedQueue的速度,我不能承受在這種情況下可能出現的無限泄漏。如果沒有,似乎我不得不創建第二個結構來跟蹤訂單,並可能有相同的問題,再加上同步問題。
如果您在此處找不到答案,請轉至http://altair.cs.oswego.edu/mai lman/listinfo/concurrency-interest並在那裏發佈你的問題。可能ConcurrentLinkedQueue的作者會給你一個決定性的答案。 – 2010-03-30 17:45:24