簡體   English   中英

為什么像 HashMap 或 LinkedList 這樣的 Java 容器不重用在添加新元素時被刪除的內部節點?

[英]Why don`t Java containers like HashMap or LinkedList reuse internal Nodes which were deleted when adding new elements?

像 LinkedList 這樣的 class 將對象存儲在稱為 Node 的內部 class 實例中。 每次添加新元素時,都會使用“new”運算符創建一個新節點。 為什么它不嘗試重用先前為后來刪除的元素創建的節點? LinkedList 可以存儲為刪除的元素創建的節點列表,並在添加新元素時嘗試重用它們。 此外,它可以將未使用的節點存儲在軟引用下,以免浪費 memory。重用節點應該減少垃圾收集器的負載並減少其調用次數。 為什么 Java 不那樣做?

此外,它可以將未使用的節點存儲在軟引用下,以免浪費 memory。重用節點應該減少垃圾收集器的負載並減少其調用次數。

Java 的垃圾收集針對具有許多壽命較短的對象而不是壽命較長的對象的情況進行了優化——尤其是對於像鏈表節點這樣的小對象。 由於 Java GC 的分代方法,丟棄現有對象並重新分配它們通常性能更好。 此外,維護軟引用通常會增加明顯的開銷。

對於大多數應用程序,您描述的方法會使事情變得更糟,而不是更好。 一般來說,Java 垃圾收集器非常擅長它的工作,並且出於 memory 的原因嘗試手動管理 Java 個對象很少能打敗它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM